Я искал в Интернете часами, но я не могу найти ничего о том, как получить палитру из TPicture.Graphic. Мне также нужно получить значения цвета, чтобы передать эти значения в TStringList для заполнения ячеек в colorpicker.Как я могу получить доступ к палитре TPicture.Graphic?
Вот код, который я в настоящее время есть:
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;
Я рисую на холсте ABitmap с изображением, содержащимся в Image1.Picture.Graphic, потому что я хочу, чтобы поддерживать все типы TPicture изображения, такие как Bitmap , Jpeg, PngImage и GIfImg.
Любая помощь будет оценена по достоинству. Я на правильном пути или что-то другое нужно?
Я отредактировал заголовок вопроса и удалил первые предложения, поскольку проблема заключается в получении доступа к существующей палитре, а не к ее созданию. – mghie