Das war nur ein Beispiel ... also nein, mußt du nicht.
Der Wichtige teil ist
bmp.Assign(Image1.Picture.Graphic);
, welcher den Bildinhalt einer anderen Komponente zuweist, bzw. rüberkopiert.
Ansonsten ist das Bild ja in TImage.Picture enthalten, über TImage.Picture.Graphic zugänglich
und wenn man den Typ kennt,
Delphi-Quellcode:
if Assigned(Image1.Picture.Graphic) then
ShowMessage('Bild vom Typ "' + Image1.Picture.Graphic.ClassName + '" enthalten')
else
ShowMessage('kein Bild enthalten');
dann kann man auch auf dessen Eigenschaften zugreifen.
(Image1.Picture.Graphic as TJPEGImage).Bitmap
Das TJPEGImage von delphi hat ein "geheimes" Bitmap, welche man für direkte Lesezugriffe verwenden könnte.
Nur Lezezugriffe möglich. (Änderungen werden nicht in das JPEG übernommen)
Auch sollte an dieses nur direkt verwenden, also nur direkt nachdem man sich diese Bitmap-Referenz besort hat, denn es kann sein, daß beim nächsten zugriff auf das JPEG dieses Bitmap wieder verschwindet und somit die Referenz ungültig würde.
>
property Bitmap: TBitmap read GetBitmap; // volatile
> Das "volatile" steht nicht umsonst in der Deklaration.
Um das nutzen zu können, muß man entweder sich einen neuen Typ deklarieren (ähnlich wie Nachfolgendes) und das TJPEGImage hart casten oder man fügt einfach Folgendes an den anfang seiner
Unit ein, dann wird quasi automatisch gecastet.
Delphi-Quellcode:
type
TJPEGImage =
class(jpeg.TJPEGImage)
public
property Bitmap;
end;
// Oder die Kurzfassung, da unit-intern Protected-Deklarationen dennoch wie Public wirken.
type TJPEGImage =
class(jpeg.TJPEGImage);
Nja, jedenfalls kann man dieses Bitmap dennoch gut nutzen, um sich dort seinen Teil rauszukopieren.
Wobei man statt Assign uch zeichnen kann.
Das Zielbild ist kleiner und wenn nan dann noch die Quelle passend verschiebt, hat man nur noch einen Ausschnitt im Ziel.
Man könnte vorher auch noch ein ClipRect über das Ziel legen, damit nur in einem bestimmten Bereich gezeichnet wird.
Delphi-Quellcode:
DeinZielCanvas.CopyRect(Zielbereich, (Image1.Picture.Graphic as TJPEGImage).Bitmap.Canvas, Quellausschnitt);
DeinZielCanvas.Draw(-100, -200, Image1.Picture.Graphic);