Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#6

Re: Wie kann ich die Farbtiefe verringern?

  Alt 29. Mär 2006, 19:55
Hallo,

Bei mir funktioniert's so ausgezeichnet:

Delphi-Quellcode:
procedure ScreenShot(x: Integer; // Bild Koordinaten
  y: Integer;
  Width: Integer;
  Height: Integer;
  PixelFormat: TPixelFormat; // Bit Format
  bm: TBitMap); // Ziel Bitmap
const
  CAPTUREBLT = $40000000; // Für transparente Fenster
var
  dc: HDC;
  lpPal: PLOGPALETTE;
begin
  {Breite und Höhe testen}
  if ((Width = 0) or
    (Height = 0)) then
    Exit;
  bm.Width := Width;
  bm.Height := Height;
  bm.PixelFormat := PixelFormat;
  {Handle des Anzeige-Gerätekontextes ermitteln}
  dc := GetDc(0);
  if (dc = 0) then
    Exit;
  {Haben wir einen Paletten-Gerätekontext?}
  if (GetDeviceCaps(dc, RASTERCAPS) and
    RC_PALETTE = RC_PALETTE) then
  begin
    {Speicher für eine logische Palette reservieren}
    GetMem(lpPal,
      SizeOf(TLOGPALETTE) +
      (255 * SizeOf(TPALETTEENTRY)));
    FillChar(lpPal^,
      SizeOf(TLOGPALETTE) +
      (255 * SizeOf(TPALETTEENTRY)),
      #0);
    {Die Palette-Version setzen}
    lpPal^.palVersion := $300;
    {Die System Paletten Einträge ermitteln}
    lpPal^.palNumEntries :=
      GetSystemPaletteEntries(dc,
      0,
      256,
      lpPal^.palPalEntry);
    if (lpPal^.PalNumEntries <> 0) then
      {Die Palette erzeugen}
      bm.Palette := CreatePalette(lpPal^);
    FreeMem(lpPal, SizeOf(TLOGPALETTE) +
      (255 * SizeOf(TPALETTEENTRY)));
  end;
  {Vom Screen aufs Bitmap kopieren}
  BitBlt(bm.Canvas.Handle,
    0,
    0,
    Width,
    Height,
    Dc,
    x,
    y,
    SRCCOPY or CAPTUREBLT);
  {Gerätekontext wieder freigeben}
  ReleaseDc(0, dc);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  BMP: TBitmap;
begin
  BMP := TBitmap.Create;
  try
    ScreenShot(0, 0, Screen.Width, Screen.Height, pf8bit, BMP);
    BMP.SaveToFile('c:\testbmp.bmp');
  finally
    BMP.Free;
  end;
end;
Thomas
  Mit Zitat antworten Zitat