몇 시간 동안 웹을 검색했지만 TPicture.Graphic에서 팔레트를 가져 오는 방법을 찾을 수 없습니다. colorpicker에 셀을 채우기 위해이 값들을 TStringList에 전달할 수 있도록 색상 값을 가져와야합니다. 나는 그런 비트 맵 모든 TPicture 이미지 형식을 지원하기 원하기 때문에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;
내가 Image1.Picture.Graphic에 포함 된 이미지와 ABitmap의 캔버스에 그리기 오전 : 여기
내가 현재 가지고있는 코드입니다 , Jpeg, PngImage 및 GIfImg.도움을 주시면 감사하겠습니다. 나는 올바른 길을 가고 있는가? 아니면 뭔가 다른 것이 필요한가?
문제가 기존 팔레트에 대한 액세스 권한을 얻는 것이지 문제가있는 것 같기 때문에 질문 제목을 편집하고 첫 번째 문장을 제거했습니다. – mghie