Assign kopiert
nicht den Bildinhalt.
Es kopiert nur die Referenz auf das interne TBitmapImage und die Eigenschaften Transparent, TransparentColor, TransparentMode, PixelFormat und AlphaFormat.
Vor allem bei Multithread oder wenn in den Bitmaps nachher noch was geändert wird, dann können schon komische Dinge rauskommen.
Delphi-Quellcode:
TBitmapImage =
class(TSharedImage)
private
FHandle: HBITMAP;
// DDB or DIB handle, used for drawing
FMaskHandle: HBITMAP;
// DDB handle
FPalette: HPALETTE;
FDIBHandle: HBITMAP;
// DIB handle corresponding to TDIBSection
FDIB: TDIBSection;
FSaveStream: TMemoryStream;
// Save original RLE stream until image is modified
FHalftone: Boolean;
// FPalette is halftone; don't write to file
...
end;
Ich mag ja falsch liegen, aber folgendes Testprogramm:
Delphi-Quellcode:
procedure test;
var
bmp1: TBitmap;
bmp2: TBitmap;
ScanLine1: Integer;
ScanLine2: Integer;
begin
bmp1 := TBitmap.Create;
bmp1.SetSize(20, 20);
bmp2 := TBitmap.Create;
bmp2.Assign(bmp1);
ScanLine1 := Integer(bmp1.ScanLine[0]);
ScanLine2 := Integer(bmp2.ScanLine[0]);
if Scanline1 <> Scanline2 then
WriteLn('Unterschiedlich')
else
WriteLn('gleich');
end.
Liefert mir unter Delphi 2007 "unterschiedlich".