本例效果图:
代码文件:
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(TForm) DrawGrid1: TDrawGrid; OpenDialog1: TOpenDialog; Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} uses GDIPOBJ, GDIPAPI, Math; var img: TGPImage; procedure TForm1.FormCreate(Sender: TObject); begin {调整 DrawGrid1 显示效果} with DrawGrid1 do begin Align := alRight; Width := 180; FixedCols := 0; FixedRows := 0; DefaultColWidth := 10; DefaultRowHeight := 10; ColCount := 0; RowCount := 1; DefaultDrawing := False; ScrollBars := ssNone; end; Button1.Left := ClientWidth - DrawGrid1.Width - Button1.Width; Button1.Top := 0; img := TGPImage.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin img.Free; end; procedure TForm1.FormPaint(Sender: TObject); var g: TGPGraphics; begin g := TGPGraphics.Create(Self.Canvas.Handle); g.DrawImage(img, 0, 0, img.GetWidth, img.GetHeight); g.Free; end; procedure TForm1.Button1Click(Sender: TObject); var Palette: PColorPalette; {调色板指针} ColorNum: Integer; {调色板中的颜色总数} Colors: PGPColor; {调色板中的颜色数组指针} i: Integer; begin OpenDialog1.Filter := 'All (*.png;*.gif;*.bmp;*.tif;*.jpg)|*.png;*.gif;*.bmp;*.tif;*.jpg'; if not OpenDialog1.Execute then Exit; img.Free; img := TGPImage.Create(OpenDialog1.FileName); Text := ExtractFileName(OpenDialog1.FileName); {为调色板分配内存} GetMem(Palette, img.GetPaletteSize); {获取调色板数据} img.GetPalette(Palette, img.GetPaletteSize); DrawGrid1.ColCount := 0; DrawGrid1.RowCount := 1; if Palette^.Count = 0 then begin ShowMessage('此图片没有调色板'); Exit; end; ColorNum := Palette^.Count; Colors := @Palette.Entries; {调色板中颜色数组的指针} if ColorNum < 16 then DrawGrid1.ColCount := ColorNum else begin DrawGrid1.ColCount := 16; DrawGrid1.RowCount := ColorNum div 16; end; DrawGrid1.Refresh; {不刷新不行} for i := 0 to ColorNum - 1 do begin DrawGrid1.Canvas.Brush.Color := ARGBToColorRef(Colors^); DrawGrid1.Canvas.FillRect(DrawGrid1.CellRect(i mod 16, i div 16)); Inc(Colors); end; FreeMem(Palette); end; end.窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 187 ClientWidth = 400 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False Position = poDesktopCenter OnCreate = FormCreate OnDestroy = FormDestroy OnPaint = FormPaint PixelsPerInch = 96 TextHeight = 13 object DrawGrid1: TDrawGrid Left = 192 Top = 8 Width = 193 Height = 137 TabOrder = 0 end object Button1: TButton Left = 8 Top = 8 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 1 OnClick = Button1Click end object OpenDialog1: TOpenDialog Left = 96 Top = 8 end end