再学 GDI+[90]: TGPImage(10) - 获取图像的调色板信息

本例效果图:

再学 GDI+[90]: TGPImage(10) - 获取图像的调色板信息

代码文件:

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


 
   

你可能感兴趣的:(image)