我已經搜索了幾個小時的網,但我無法找到如何從TPicture.Graphic得到調色板東西。我還需要獲取顏色值,以便我可以將這些值傳遞給TStringList以在Color Picker中填充單元格。如何訪問TPicture.Graphic的調色板?
這裏是我目前擁有的代碼:我繪製ABitmap與包含在Image1.Picture.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;
,因爲我要支持所有TPicture的圖像類型如Bitmap ,Jpeg,PngImage和GIfImg。
任何援助將不勝感激。我在正確的道路上還是需要不同的東西?
我編輯了您的問題標題並刪除了第一個句子,因爲問題似乎是隻能訪問現有的調色板,而不是創建一個。 – mghie 2009-08-08 07:32:31