亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? rxgraph.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
      begin
        for X := 0 to Header.biWidth - 1 do begin
          C := Byte(Src^);
          Src := HugeOffset(Src, 1);
          PByte(Dest)^ := Colors[C].rgbBlue;
          Dest := HugeOffset(Dest, 1);
          PByte(Dest)^ := Colors[C].rgbGreen;
          Dest := HugeOffset(Dest, 1);
          PByte(Dest)^ := Colors[C].rgbRed;
          Dest := HugeOffset(Dest, 1);
        end;
      end;
    end;
  end;
end;
*)

{ DIB utility routines }

function GetPaletteBitmapFormat(Bitmap: TBitmap): TPixelFormat;
var
  PalSize: Integer;
begin
  Result := pfDevice;
  if Bitmap.Palette <> 0 then begin
    GetObject(Bitmap.Palette, SizeOf(Integer), @PalSize);
    if PalSize > 0 then begin
      if PalSize <= 2 then Result := pf1bit
      else if PalSize <= 16 then Result := pf4bit
      else if PalSize <= 256 then Result := pf8bit;
    end;
  end;
end;

function GetBitmapPixelFormat(Bitmap: TBitmap): TPixelFormat;
{$IFDEF RX_D3}
begin
  Result := Bitmap.PixelFormat;
{$ELSE}
var
{$IFDEF WIN32}
  BM: Windows.TBitmap;
{$ELSE}
  BM: WinTypes.TBitmap;
{$ENDIF}
begin
  Result := pfDevice;
  if Bitmap.Handle <> 0 then begin
    GetObject(Bitmap.Handle, SizeOf(BM), @BM);
    case BM.bmBitsPixel * BM.bmPlanes of
      1: Result := pf1bit;
      4: Result := pf4bit;
      8: Result := pf8bit;
      24: Result := pf24bit;
    end;
  end;
{$ENDIF}
end;

function BytesPerScanline(PixelsPerScanline, BitsPerPixel,
  Alignment: Longint): Longint;
begin
  Dec(Alignment);
  Result := ((PixelsPerScanline * BitsPerPixel) + Alignment) and
    not Alignment;
  Result := Result div 8;
end;

procedure InitializeBitmapInfoHeader(Bitmap: HBITMAP; var BI: TBitmapInfoHeader;
  PixelFormat: TPixelFormat);
{$IFDEF WIN32}
var
  DS: TDIBSection;
  Bytes: Integer;
begin
  DS.dsbmih.biSize := 0;
  Bytes := GetObject(Bitmap, SizeOf(DS), @DS);
  if Bytes = 0 then InvalidBitmap
  else if (Bytes >= (SizeOf(DS.dsbm) + SizeOf(DS.dsbmih))) and
    (DS.dsbmih.biSize >= DWORD(SizeOf(DS.dsbmih))) then
    BI := DS.dsbmih
  else begin
    FillChar(BI, sizeof(BI), 0);
    with BI, DS.dsbm do begin
      biSize := SizeOf(BI);
      biWidth := bmWidth;
      biHeight := bmHeight;
    end;
  end;
  case PixelFormat of
    pf1bit: BI.biBitCount := 1;
    pf4bit: BI.biBitCount := 4;
    pf8bit: BI.biBitCount := 8;
    pf24bit: BI.biBitCount := 24;
    else BI.biBitCount := DS.dsbm.bmBitsPixel * DS.dsbm.bmPlanes;
  end;
  BI.biPlanes := 1;
  if BI.biSizeImage = 0 then
    BI.biSizeImage := BytesPerScanLine(BI.biWidth, BI.biBitCount, 32) * Abs(BI.biHeight);
end;
{$ELSE WIN32}
var
  BM: WinTypes.TBitmap;
begin
  GetObject(Bitmap, SizeOf(BM), @BM);
  with BI do begin
    biSize := SizeOf(BI);
    biWidth := BM.bmWidth;
    biHeight := BM.bmHeight;
    case PixelFormat of
      pf1bit: biBitCount := 1;
      pf4bit: biBitCount := 4;
      pf8bit: biBitCount := 8;
      pf24bit: biBitCount := 24;
      else biBitCount := BM.bmBitsPixel * BM.bmPlanes;
    end;
    biPlanes := 1;
    biXPelsPerMeter := 0;
    biYPelsPerMeter := 0;
    biClrUsed := 0;
    biClrImportant := 0;
    biCompression := BI_RGB;
    if biBitCount in [9..32] then biBitCount := 24;
    biSizeImage := (((biWidth * biBitCount + 31) div 32) * 4) * biHeight;
  end;
end;
{$ENDIF WIN32}

procedure InternalGetDIBSizes(Bitmap: HBITMAP; var InfoHeaderSize: Integer;
  var ImageSize: Longint; BitCount: TPixelFormat);
var
  BI: TBitmapInfoHeader;
begin
  InitializeBitmapInfoHeader(Bitmap, BI, BitCount);
  if BI.biBitCount > 8 then begin
    InfoHeaderSize := SizeOf(TBitmapInfoHeader);
{$IFDEF WIN32}
    if (BI.biCompression and BI_BITFIELDS) <> 0 then
      Inc(InfoHeaderSize, 12);
{$ENDIF}
  end
  else InfoHeaderSize := SizeOf(TBitmapInfoHeader) + SizeOf(TRGBQuad) *
    (1 shl BI.biBitCount);
  ImageSize := BI.biSizeImage;
end;

function InternalGetDIB(Bitmap: HBITMAP; Palette: HPALETTE;
  var BitmapInfo; var Bits; PixelFormat: TPixelFormat): Boolean;
var
  OldPal: HPALETTE;
  DC: HDC;
begin
  InitializeBitmapInfoHeader(Bitmap, TBitmapInfoHeader(BitmapInfo), PixelFormat);
{$IFDEF WIN32}
  with TBitmapInfoHeader(BitmapInfo) do biHeight := Abs(biHeight);
{$ENDIF}
  OldPal := 0;
  DC := CreateCompatibleDC(0);
  try
    if Palette <> 0 then
    begin
      OldPal := SelectPalette(DC, Palette, False);
      RealizePalette(DC);
    end;
    Result := GetDIBits(DC, Bitmap, 0, TBitmapInfoHeader(BitmapInfo).biHeight,
      @Bits, TBitmapInfo(BitmapInfo), DIB_RGB_COLORS) <> 0;
  finally
    if OldPal <> 0 then SelectPalette(DC, OldPal, False);
    DeleteDC(DC);
  end;
end;

function DIBFromBit(Src: HBITMAP; Pal: HPALETTE; PixelFormat: TPixelFormat;
  var Length: Longint): Pointer;
var
  HeaderSize: Integer;
  ImageSize: Longint;
  FileHeader: PBitmapFileHeader;
  BI: PBitmapInfoHeader;
  Bits: Pointer;
begin
  if Src = 0 then InvalidBitmap;
  InternalGetDIBSizes(Src, HeaderSize, ImageSize, PixelFormat);
  Length := SizeOf(TBitmapFileHeader) + HeaderSize + ImageSize;
  Result := AllocMemo(Length);
  try
    FillChar(Result^, Length, 0);
    FileHeader := Result;
    with FileHeader^ do
    begin
      bfType := $4D42;
      bfSize := Length;
      bfOffBits := SizeOf(FileHeader^) + HeaderSize;
    end;
    BI := PBitmapInfoHeader(Longint(FileHeader) + SizeOf(FileHeader^));
    Bits := Pointer(Longint(BI) + HeaderSize);
    InternalGetDIB(Src, Pal, BI^, Bits^, PixelFormat);
  except
    FreeMemo(Result);
    raise;
  end;
end;

{ Change bits per pixel in a General Bitmap }

function BitmapToMemoryStream(Bitmap: TBitmap; PixelFormat: TPixelFormat;
  Method: TMappingMethod): TMemoryStream;
var
  FileHeader: PBitmapFileHeader;
  BI, NewBI: PBitmapInfoHeader;
  Bits: Pointer;
  NewPalette: PRGBPalette;
  NewHeaderSize: Integer;
  ImageSize, Length, Len: Longint;
  P, InitData: Pointer;
  ColorCount: Integer;
begin
  if Bitmap.Handle = 0 then InvalidBitmap;
  if (GetBitmapPixelFormat(Bitmap) = PixelFormat) and
    (Method <> mmGrayscale) then
  begin
    Result := TMemoryStream.Create;
    try
      Bitmap.SaveToStream(Result);
      Result.Position := 0;
    except
      Result.Free;
      raise;
    end;
    Exit;
  end;
  if not (PixelFormat in [pf1bit, pf4bit, pf8bit, pf24bit]) then
    NotImplemented
  else if (PixelFormat in [pf1bit, pf4Bit]) then begin
    P := DIBFromBit(Bitmap.Handle, Bitmap.Palette, PixelFormat, Length);
    try
      Result := TMemoryStream.Create;
      try
        Result.Write(P^, Length);
        Result.Position := 0;
      except
        Result.Free;
        raise;
      end;
    finally
      FreeMemo(P);
    end;
    Exit;
  end;
  { pf8bit - expand to 24bit first }
  InitData := DIBFromBit(Bitmap.Handle, Bitmap.Palette, pf24bit, Len);
  try
    BI := PBitmapInfoHeader(Longint(InitData) + SizeOf(TBitmapFileHeader));
    if BI^.biBitCount <> 24 then NotImplemented; {!!!}
    Bits := Pointer(Longint(BI) + SizeOf(TBitmapInfoHeader));
    InternalGetDIBSizes(Bitmap.Handle, NewHeaderSize, ImageSize, PixelFormat);
    Length := SizeOf(TBitmapFileHeader) + NewHeaderSize;
    P := AllocMemo(Length);
    try
      ZeroMemory(P, Length);
      NewBI := PBitmapInfoHeader(Longint(P) + SizeOf(TBitmapFileHeader));
      NewPalette := PRGBPalette(Longint(NewBI) + SizeOf(TBitmapInfoHeader));
      FileHeader := PBitmapFileHeader(P);
      InitializeBitmapInfoHeader(Bitmap.Handle, NewBI^, PixelFormat);
      case Method of
        mmQuantize:
          begin
            ColorCount := 256;
            Quantize(BI^, Bits, Bits, ColorCount, NewPalette^);
            NewBI^.biClrImportant := ColorCount;
          end;
        mmTrunc784:
          begin
            TruncPal7R8G4B(NewPalette^);
            Trunc7R8G4B(BI^, Bits, Bits);
            NewBI^.biClrImportant := 224;
          end;
        mmTrunc666:
          begin
            TruncPal6R6G6B(NewPalette^);
            Trunc6R6G6B(BI^, Bits, Bits);
            NewBI^.biClrImportant := 216;
          end;
        mmTripel:
          begin
            TripelPal(NewPalette^);
            Tripel(BI^, Bits, Bits);
          end;
        mmHistogram:
          begin
            Histogram(BI^, NewPalette^, Bits, Bits,
              PixelFormatToColors(PixelFormat), 255, 255, 255);
          end;
        mmGrayscale:
          begin
            GrayPal(NewPalette^);
            GrayScale(BI^, Bits, Bits);
          end;
      end;
      with FileHeader^ do begin
        bfType := $4D42;
        bfSize := Length;
        bfOffBits := SizeOf(FileHeader^) + NewHeaderSize;
      end;
      Result := TMemoryStream.Create;
      try
        Result.Write(P^, Length);
        Result.Write(Bits^, ImageSize);
        Result.Position := 0;
      except
        Result.Free;
        raise;
      end;
    finally
      FreeMemo(P);
    end;
  finally
    FreeMemo(InitData);
  end;
end;

function BitmapToMemory(Bitmap: TBitmap; Colors: Integer): TStream;
var
  PixelFormat: TPixelFormat;
begin
  if Colors <= 2 then PixelFormat := pf1bit
  else if Colors <= 16 then PixelFormat := pf4bit
  else if Colors <= 256 then PixelFormat := pf8bit
  else PixelFormat := pf24bit;
  Result := BitmapToMemoryStream(Bitmap, PixelFormat, DefaultMappingMethod);
end;

procedure SaveBitmapToFile(const Filename: string; Bitmap: TBitmap;
  Colors: Integer);
var
  Memory: TStream;
begin
  if Bitmap.Monochrome then Colors := 2;
  Memory := BitmapToMemory(Bitmap, Colors);
  try
    TMemoryStream(Memory).SaveToFile(Filename);
  finally
    Memory.Free;
  end;
end;

procedure SetBitmapPixelFormat(Bitmap: TBitmap; PixelFormat: TPixelFormat;
  Method: TMappingMethod);
var
  M: TMemoryStream;
begin
  if (Bitmap.Handle = 0) or (GetBitmapPixelFormat(Bitmap) = PixelFormat) then
    Exit;
  M := BitmapToMemoryStream(Bitmap, PixelFormat, Method);
  try
    Bitmap.LoadFromStream(M);
  finally
    M.Free;
  end;
end;

procedure GrayscaleBitmap(Bitmap: TBitmap);
begin
  SetBitmapPixelFormat(Bitmap, pf8bit, mmGrayscale);
end;

function ZoomImage(ImageW, ImageH, MaxW, MaxH: Integer; Stretch: Boolean): TPoint;
var
  Zoom: Double;
begin
  Result := Point(0, 0);
  if (MaxW <= 0) or (MaxH <= 0) or (ImageW <= 0) or (ImageH <= 0) then
    Exit;
  with Result do
    if Stretch then begin
      Zoom := MaxFloat([ImageW / MaxW, ImageH / MaxH]);
      if (Zoom > 0) then begin
        X := Round(ImageW * 0.98 / Zoom);
        Y := Round(ImageH * 0.98 / Zoom);
      end
      else begin
        X := ImageW;
        Y := ImageH;
      end;
    end
    else begin
      X := MaxW;
      Y := MaxH;
    end;
end;

procedure TileImage(Canvas: TCanvas; Rect: TRect; Image: TGraphic);
var
  X, Y: Integer;
  SaveIndex: Integer;
begin
  if (Image.Width = 0) or (Image.Height = 0) then Exit;
  SaveIndex := SaveDC(Canvas.Handle);
  try
    with Rect do
      IntersectClipRect(Canvas.Handle, Left, Top, Right, Bottom);
    for X := 0 to (WidthOf(Rect) div Image.Width) do
      for Y := 0 to (HeightOf(Rect) div Image.Height) do
        Canvas.Draw(Rect.Left + X * Image.Width,
          Rect.Top + Y * Image.Height, Image);
  finally
    RestoreDC(Canvas.Handle, SaveIndex);
  end;
end;

{ TRxGradient }

constructor TRxGradient.Create;
begin
  inherited Create;
  FStartColor := clSilver;
  FEndColor := clGray;
  FStepCount := 64;
  FDirection := fdTopToBottom;
end;

procedure TRxGradient.Assign(Source: TPersistent);
begin
  if Source is TRxGradient then begin
    with TRxGradient(Source) do begin
      Self.FStartColor := StartColor;
      Self.FEndColor := EndColor;
      Self.FStepCount := StepCount;
      Self.FDirection := Direction;
      Self.FVisible := Visible;
    end;
    Changed;
  end
  else inherited Assign(Source);
end;

procedure TRxGradient.Changed;
begin
  if Assigned(FOnChange) then FOnChange(Self);
end;

procedure TRxGradient.Draw(Canvas: TCanvas; Rect: TRect);
begin
  GradientFillRect(Canvas, Rect, FStartColor, FEndColor, FDirection,
    FStepCount);
end;

procedure TRxGradient.SetStartColor(Value: TColor);
begin
  if Value <> FStartColor then begin
    FStartColor := Value;
    Changed;
  end;
end;

procedure TRxGradient.SetEndColor(Value: TColor);
begin
  if Value <> FEndColor then begin
    FEndColor := Value;
    Changed;
  end;
end;

procedure TRxGradient.SetDirection(Value: TFillDirection);
begin
  if Value <> FDirection then begin
    FDirection := Value;
    Changed;
  end;
end;

procedure TRxGradient.SetStepCount(Value: Byte);
begin
  if Value <> FStepCount then begin
    FStepCount := Value;
    Changed;
  end;
end;

procedure TRxGradient.SetVisible(Value: Boolean);
begin
  if FVisible <> Value then begin
    FVisible := Value;
    Changed;
  end;
end;

initialization
  InitTruncTables;
end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产91久久久久久久妲己 | 欧美一级黄色大片| 91蝌蚪porny九色| 国产精品一级黄| 韩国v欧美v日本v亚洲v| 另类小说色综合网站| 麻豆精品一区二区av白丝在线| 日韩精品欧美精品| 日韩精品久久理论片| 婷婷六月综合亚洲| 视频一区中文字幕国产| 日产国产高清一区二区三区| 免费在线观看成人| 久久国产精品第一页| 国产麻豆视频精品| 不卡视频在线看| 色婷婷av一区二区三区软件| 色综合久久久久久久久| 欧美性猛片xxxx免费看久爱| 欧美日本乱大交xxxxx| 91精品国产乱码| 精品国产乱码久久久久久老虎| 久久久不卡影院| 成人欧美一区二区三区白人| 亚洲少妇中出一区| 日韩精品亚洲一区| 国产伦精一区二区三区| 99精品视频在线播放观看| 欧美写真视频网站| 欧美videos大乳护士334| 国产农村妇女精品| 一区二区三区资源| 免费在线成人网| 成人免费看片app下载| 欧美亚洲综合色| 日韩三级电影网址| 国产精品美女久久久久久久网站| 亚洲影院免费观看| 久久 天天综合| 色综合天天综合在线视频| 91精品国产91综合久久蜜臀| 久久久久久97三级| 亚洲成人www| 国产成人一级电影| 欧美视频在线播放| 欧美国产日本视频| 日韩av一区二区三区四区| 成人一区在线看| 4438x成人网最大色成网站| 欧美激情一区二区三区蜜桃视频| 亚洲成人免费在线观看| 东方aⅴ免费观看久久av| 欧美日韩一级二级三级| 国产精品视频第一区| 天天综合色天天综合| 99久久精品99国产精品| 欧美变态tickling挠脚心| 亚洲欧洲中文日韩久久av乱码| 麻豆成人久久精品二区三区红 | 久久久精品tv| 五月婷婷激情综合| 99久久久久久99| 亚洲精品在线观| 日韩电影在线观看网站| 94-欧美-setu| 久久亚洲免费视频| 午夜精品免费在线| 91在线观看高清| 亚洲精品一区二区三区精华液 | 欧美视频在线观看一区| 中文字幕乱码日本亚洲一区二区| 日韩电影在线观看电影| 91久久精品一区二区三| 亚洲国产精品二十页| 国产在线精品一区二区| 日韩一区二区三区在线观看| 亚洲精品国产第一综合99久久| 国产传媒久久文化传媒| 欧美大肚乱孕交hd孕妇| 午夜精品久久久久久| 91黄色激情网站| 1024亚洲合集| 国产999精品久久| 久久综合国产精品| 久久99精品久久久久久| 91精品一区二区三区久久久久久| 一区二区三区色| 91美女视频网站| 国产精品久久看| 国产69精品久久久久777| 欧美精品一区二区在线播放| 七七婷婷婷婷精品国产| 欧美福利视频一区| 午夜欧美视频在线观看| 色综合天天综合狠狠| 亚洲视频狠狠干| 91视频国产观看| 亚洲欧美另类综合偷拍| 99r国产精品| 亚洲精品视频在线观看网站| 91一区二区三区在线观看| 国产精品对白交换视频 | 久久色成人在线| 国产在线日韩欧美| 久久午夜羞羞影院免费观看| 精品午夜久久福利影院| 日韩精品一区二区三区蜜臀| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美一级理论性理论a| 麻豆精品蜜桃视频网站| 久久亚洲私人国产精品va媚药| 国产精品系列在线观看| 欧美激情一二三区| 91麻豆福利精品推荐| 亚洲人成伊人成综合网小说| 欧美中文一区二区三区| 五月开心婷婷久久| 日韩欧美在线影院| 国产美女主播视频一区| 国产精品蜜臀在线观看| 日本久久电影网| 日韩中文欧美在线| 亚洲精品一区二区三区蜜桃下载 | 六月丁香婷婷色狠狠久久| 精品日韩在线观看| 成人av在线网| 亚洲国产一区二区在线播放| 日韩一区二区在线看片| 国产乱淫av一区二区三区 | 看电视剧不卡顿的网站| 久久久美女毛片| 色综合久久中文字幕| 日韩不卡免费视频| 国产亚洲1区2区3区| 91精品办公室少妇高潮对白| 日韩精品一级二级| 国产日韩v精品一区二区| 91久久一区二区| 免费在线看成人av| 国产精品久久久久影院亚瑟| 在线中文字幕不卡| 精一区二区三区| ㊣最新国产の精品bt伙计久久| 欧美日韩和欧美的一区二区| 国产一区二区在线免费观看| 亚洲天堂免费在线观看视频| 91精品国产aⅴ一区二区| 成人开心网精品视频| 天堂久久一区二区三区| 亚洲国产精品av| 91麻豆精品国产91久久久资源速度 | 欧美精品aⅴ在线视频| 国产精品一二三区在线| 一区二区三区在线观看动漫| 日韩区在线观看| 色综合激情久久| 精品一区二区三区在线观看| 亚洲女爱视频在线| 精品国精品自拍自在线| 91黄色小视频| 成人爽a毛片一区二区免费| 天天综合网天天综合色| 综合色中文字幕| 日韩免费高清av| 欧美做爰猛烈大尺度电影无法无天| 久久精品国产999大香线蕉| 亚洲摸摸操操av| 国产日韩欧美精品一区| 日韩三级在线观看| 欧美色综合久久| 99re热这里只有精品免费视频| 久久国产剧场电影| 日韩精品一二三四| 亚洲女同ⅹxx女同tv| 中文字幕av资源一区| 精品国产免费一区二区三区四区 | 在线观看日韩一区| 丁香激情综合五月| 老司机精品视频在线| 亚洲高清三级视频| 亚洲精品中文在线| 国产精品久久一卡二卡| 国产亚洲欧美激情| 日韩欧美一二三区| 欧美年轻男男videosbes| 色欧美88888久久久久久影院| 国产成人精品1024| 精品一二线国产| 日韩成人免费看| 天堂蜜桃91精品| 亚洲3atv精品一区二区三区| 亚洲少妇屁股交4| 中文字幕日本不卡| 欧美极品美女视频| 国产情人综合久久777777| 精品国免费一区二区三区| 精品欧美一区二区久久| 制服.丝袜.亚洲.另类.中文 | 亚洲激情在线激情| 亚洲欧洲综合另类|