procedure TBZCustomBitmap.DrawToCanvas(Const ACanvas: TCanvas; Const ARect: TRect; Const IsOpaque: Boolean; Const ClearBK: Boolean);
Var
NSImageRep : NSBitmapImageRep;
dstRect, srcRect : NSRect;
//TmpBmp : Graphics.TBitmap;
ctx : TCocoaContext;
BitmapFormat: NSBitmapFormat;
BitsPtr: Pointer;
Begin
Self.PreMultiplyAlpha;
BitmapFormat := 0;
BitmapFormat := BitmapFormat or NSAlphaFirstBitmapFormat;
getMem(BitsPtr, Self.Size);
move(Self.getSurfaceBuffer^, BitsPtr^, Self.Size);
NSImageRep := NSBitmapImageRep(NSBitmapImageRep.alloc.initWithBitmapDataPlanes_pixelsWide_pixelsHigh__colorSpaceName_bitmapFormat_bytesPerRow_bitsPerPixel(
//Pointer(Self.getSurfaceBuffer), // planes, BitmapDataPlanes
@(BitsPtr),
Self.Width, // width, pixelsWide
Self.Height,// height, PixelsHigh
8,// bitsPerSample, bps
4, // samplesPerPixel, spp
Not(IsOpaque), // hasAlpha
False, // isPlanar
NSDeviceRGBColorSpace, // colorSpaceName
BitmapFormat, // bitmapFormat
Self.ImageDescription.BytesPerLine, // bytesPerRow
32 //bitsPerPixel
));
dstRect.origin.x := ARect.Left;
dstRect.origin.y := ARect.Top;
dstRect.size.width := ARect.Right - ARect.Left;
dstRect.size.height := ARect.Bottom - ARect.Top;
srcRect.origin.x := 0;
srcRect.origin.y := 0;
srcRect.size.width := Self.Width;
srcRect.size.height := Self.Height;
ctx := CheckDC(ACanvas.Handle);
ctx.DrawImageRep(dstRect, srcRect, NSImageRep);
NSImageRep.release;
NSImageRep := nil;
FreeMem(BitsPtr);
// work but a little bit slow
// Try
// TmpBmp := Self.ExportToBitmap;
// ACanvas.StretchDraw(ARect,TmpBmp);
// finally
// TmpBmp.Free;
// end;
//Canvas.Draw(0,0, ImageBitmap);
//Canvas.Draw(R.Left, R.Top, ImageBitmap);
End;