Einzelnen Beitrag anzeigen

Benutzerbild von Cypheros
Cypheros

Registriert seit: 12. Sep 2024
Ort: Büren
40 Beiträge
 
Delphi 11 Alexandria
 
#1

ID2D1Bitmap1 von TBitmap erstellen

  Alt 28. Aug 2025, 23:53
Hi Delphianer,

hänge momentan bei einer Routine um ein TBitmap in ein ID2D1Bitmap1 zu überführen. Sehe den Wald vor lauter Bäumen nicht mehr.

Code:
function TcyImage.CreateBitmap(Bitmap: TBitmap; D2DContext: ID2D1DeviceContext): ID2D1Bitmap1;
var
  BitmapInfo: TBitmapInfo;
  buf: array of Byte;
  BitmapProperties: D2D1_BITMAP_PROPERTIES1;
  Hbmp: HBitmap;
  LPitch: Cardinal;
begin
  FillChar(BitmapInfo, SizeOf(BitmapInfo), 0);
  BitmapInfo.bmiHeader.biSize := Sizeof(BitmapInfo.bmiHeader);
  BitmapInfo.bmiHeader.biHeight := -Bitmap.Height;
  BitmapInfo.bmiHeader.biWidth := Bitmap.Width;
  BitmapInfo.bmiHeader.biPlanes := 1;
  BitmapInfo.bmiHeader.biBitCount := 32;

  SetLength(buf, Bitmap.Height * Bitmap.Width * 4);
  // Forces evaluation of Bitmap.Handle before Bitmap.Canvas.Handle
  Hbmp := Bitmap.Handle;
  GetDIBits(Bitmap.Canvas.Handle, Hbmp, 0, Bitmap.Height, @buf[0], BitmapInfo, DIB_RGB_COLORS);

  BitmapProperties := System.Default(D2D1_BITMAP_PROPERTIES1);
  BitmapProperties.dpiX := 0;
  BitmapProperties.dpiY := 0;
  BitmapProperties.bitmapOptions := D2D1_BITMAP_OPTIONS_NONE;
  BitmapProperties._pixelFormat.format := DXGI_FORMAT_B8G8R8A8_UNORM;
  if (Bitmap.PixelFormat <> pf32bit) or (Bitmap.AlphaFormat = afIgnored) then
    BitmapProperties._pixelFormat.alphaMode := D2D1_ALPHA_MODE_IGNORE
  else
    BitmapProperties._pixelFormat.alphaMode := D2D1_ALPHA_MODE_PREMULTIPLIED;

  LPitch := 4 * Bitmap.Width;

  if assigned(D2DContext) then
    D2DContext.CreateBitmap(D2D1SizeU(Bitmap.Width, Bitmap.Height), @buf[0], LPitch, @BitmapProperties, Result);
end;
Es wir leider nur ein weißes Bild ausgegeben bei D2DContext.DrawBitmap(CreateBitmap(Bitmap), @LRect, 1, D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR);
Frank Siek
  Mit Zitat antworten Zitat