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);