Einzelnen Beitrag anzeigen

Benutzerbild von zer00
zer00

Registriert seit: 7. Okt 2003
95 Beiträge
 
Delphi 2005 Professional
 
#1

Wie kann ich die Farbtiefe verringern?

  Alt 20. Feb 2006, 22:09
Hi @ll

Ich habe eine App geschrieben, die einen ScreenShot vom Desktop(512*512 Pixel) erstellt und diesen in einer Bitmap speichert.
Eigentlich funktioniert alles wunderbar, nur möchte ein Anwender das die Bitmap anstelle einer 32Bit nur eine Frabtiefe von 256 Farben aufweist.
Vielleicht kann mir jemand sagen wo ich was im Code drehen muss um das Ziel zu erreichen?

grz zer00

Delphi-Quellcode:
type logPal = record
   lpal : TLogPalette;
   dummy : array[1..255] of TPaletteEntry;
end;


procedure TForm1.takeScreenShot;
var
  sysPal : logPal;
  aImage: TImage; // Unit ExtCtrls!
  hPal: HPalette;
  aHDC: HDC;
  aCanvas: TCanvas;
  aRect: TRect; // Source Rect
  Datum: String; // Dateiname = Datum
 begin

 Datum:= DateToStr(Now) + '.bmp';

 aHDC := GetWindowDC(0);
 sysPal.lPal.palVersion:=$300;
 sysPal.lPal.palNumEntries:=256;
 GetSystemPaletteEntries(aHDC,0,256,SysPal.lpal.PalpalEntry);
 hPal:=CreatePalette(sysPal.lpal);
 aCanvas := TCanvas.Create;
 aCanvas.Handle := aHDC;


 aRect := Rect(0,0,Screen.Width,Screen.Height);
 aImage:=TImage.Create(Self);

 with aImage do
  begin
    Height:= LenRect;
    Width:= LenRect;
    Canvas.CopyRect(aRect,aCanvas,aRect);
    ReleaseDC(GetDeskTopWindow,aHDC);
    Picture.Bitmap.Palette:=hPal
  end;
  aImage.Picture.SavetoFile(Datum);
  aImage.Free;
  ReleaseDC(GetDeskTopWindow, aHDC);
  ReleaseDC(aHDC, aCanvas.Handle);

end;
sei kühn, sei immer kühn, sei nicht zu kühn
  Mit Zitat antworten Zitat