Webを何時間も検索しましたが、TPicture.Graphicからパレットを取得する方法について何も見つかりません。また、カラーピッカーのセルを塗りつぶすためにこれらの値をTStringListに渡すことができるように、カラー値を取得する必要があります。
これが私が現在持っているコードです:
procedure TFormMain.OpenImage1Click( Sender: TObject );
var
i: integer;
S: TStringList;
AColor: TColor;
AColorCount: integer;
N: string;
Pal: PLogPalette;
HPal: hPalette;
begin
if OpenPictureDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
try
Pal := nil;
try
S := TStringList.Create;
ABitmap.Free; // Release any existing bitmap
ABitmap := TBitmap.Create;
Image1.Picture.LoadFromFile( OpenPictureDialog1.Filename );
ABitmap.Canvas.Draw( 0, 0, Image1.Picture.Graphic );
GetMem( Pal, Sizeof( TLogPalette ) + Sizeof( TPaletteEntry ) * 255 );
Pal.palversion := $300;
Pal.palnumentries := 256;
for i := 0 to 255 do
begin
AColor := Pal.PalPalEntry[ i ].PeRed shl 16 + Pal.PalPalEntry[ i ].PeGreen shl 8 + Pal.PalPalEntry[ i ].PeBlue;
N := ColorToString( AColor );
S.Add( N );
end;
HPal := CreatePalette( Pal^ );
ABitmap.Palette := HPal;
Memo1.Lines := S;
finally; FreeMem( Pal ); end;
S.Free;
finally; Screen.Cursor := crDefault; end;
end;
end;
Bitmap、Jpeg、PngImage、GIfImgなどのすべてのTPicture画像タイプをサポートしたいので、Image1.Picture.Graphicに含まれている画像を使用してABitmapのキャンバスに描画しています。
どんな援助もいただければ幸いです。私は正しい道を進んでいますか、それとも何か別のものが必要ですか?