![]() |
Picture2Bitmap
Hallo,
ich habe ein Bild mit
Delphi-Quellcode:
in meine Eigenschaft Picture geladen.
SetOlePicture(Image1.Picture, MODIMiDocView1.ImageSelection.ExportToPicture(0, 0));
Ich muss auf das Bild aber jetzt als Bitmap zugreifen. Wie bekomme ich es jetzt hin, das ich in der Eigenschaft
Delphi-Quellcode:
auch das Bild habe?
Image1.Picutre.Bitmap
Falls ich darauf zugreife, sagt er mir, dass das Bitmap ungültig ist. Danke Oliver |
Re: Picture2Bitmap
Zitat:
Es könnte eine JPEG Datei sein, oder über OLE werden META Daten übertragen...?!? Frank :coder: |
Re: Picture2Bitmap
Zitat:
Über TGraphic kann ich drauf zugreifen. |
Re: Picture2Bitmap
Zitat:
|
Re: Picture2Bitmap
ääähm...
Delphi-Quellcode:
Ich glaube, das KÖNNTE funktionieren...
function GetBitmap(pic: TPicture): TBitmap;
begin Result := TBitmap.Create; Result.Assign(pic{.Graphic}); end; |
Re: Picture2Bitmap
möp... geht nicht...
Aber das:
Delphi-Quellcode:
Zumindest mit JPEG.
procedure GetBitmap(const Graphic: TGraphic; out Bitmap: TBitmap);
begin if Bitmap = nil then Bitmap := TBitmap.Create; Bitmap.SetSize(Graphic.Width,Graphic.Height); Bitmap.Canvas.Draw(0,0,Graphic); end; EDIT: tpicture->tgraphic |
Re: Picture2Bitmap
Jupp. Mit einer ungefähren Wahrscheinlichkeit von 2,3 * 10^-10, weshalb es mich wundert, dass es bei dir funktioniert hat :stupid: .
Aber anstatt die fehlerhafte erste Zeile zu entfernen, warum nicht gleich eine Funktion benutzen? Den ersten Parameter könnte man noch zu TGraphic vereinfachen, aber das wäre nur noch ein wenig Kosmetik. |
Re: Picture2Bitmap
ja wie jetzt? Geht es so oder nicht? Entweder es geht hundertprozentig oder gar nicht...
|
Re: Picture2Bitmap
Oder es geht nur, wenn der uninitialisierte Bitmap-Parameter zufällig nil beinhaltet. Wobei ich nicht beachtet habe, dass als Argument ein Feld übergeben werden könnte (das ja stets mit 0 initialisiert wird), aber eine immer funktionierende Funktion wäre trotzdem schöner ;) .
|
Re: Picture2Bitmap
Wenn der Anwender zu blöde ist, das Ding zu initialisieren, ist er selber schuld :roll:
Wenn ich das Bitmap als Rückgabeparameter nehme, gibts wieder Probleme mit Speicherlecks, weil der Anwender wiederum zu blöd ist, das Zeug freizugeben. Also entweder - oder. Da es in Delphi leider keine saubere (= zuverlässige und elegante) Möglichkeit gibt, ein Objekt auf seine Existenz hin zu überprüfen bzw. ob hinter einem Pointer eine Instanz oder Speichermüll (der berüchtigte "wilde zeiger") steht (es lebe .Net/Java :mrgreen: ), hab ich keine Chance, das ganze wasserdicht zu machen. Also was wäre deine "immer funktionierende Funktion" bitte? |
Re: Picture2Bitmap
Wir können dem Anfänger wahrlich nicht helfen, an das Freigeben eines Funktionsergebnisses zu denken, das ist sein Problem allein.
Aber kein Profi der Welt würde je auf die Idee kommen, dass ein out-Parameter der Vorbelegung bedarf, weil es dessen Bedeutung ad absurdum führt. Jedenfalls solange er nicht in den Code schaut, und dann würde er ihn flugs umschrauben, um nicht noch einmal auf die Nase zu fliegen ;) . |
Re: Picture2Bitmap
Hmm... ja... hab ich auch schon drüber nachgedacht. Sollte man vielleicht einen var-parameter (EDIT: also out->var) draus machen? also ich will da wirklich keine Speicherleichen produzieren. Lieber mal vom Debugger unsanft drauf hingewiesen werden, seine Variablen ordentlcih zu initialisieren. Denn das fällt auf, im gegensatz zu Speicherlecks.
|
Re: Picture2Bitmap
Bei Klassen ist es recht egal ob nichts, var, out oder const. Kommt immer aufs gleiche raus.
|
Re: Picture2Bitmap
Zitat:
|
Re: Picture2Bitmap
Ich meine, wenn man eine Klasse als Parameter übergibt, ist der Zusatz egal.
|
Re: Picture2Bitmap
Auch da wäre ich mir nicht sicher.
|
Re: Picture2Bitmap
Ich mir schon.
kein Zustatz: Instanzenpointer wird übergeben. var-Zusatz: Pointer auf Instanzenpointer macht keinen Sinn -> Instanzenpointer wird übergeben. const-Zusatz: Instanzenpointer wird übergeben. out-Zusatz: Instanzenpointer wird übergeben. |
Re: Picture2Bitmap
Manuel, was passiert, wenn der Parameter in der aufgerufenen Routine verändert wird?
Gruß Hawkeye |
Re: Picture2Bitmap
Call by reference. ;)
Klar, wenn der Instanzenpointer übergeben ist. Denn wie will Delphi eine Klasseninstanz kopieren? Also eine einfache Kopie wie bei Strings geht nicht. |
Re: Picture2Bitmap
Das Thema "Picture2Bitmap" hatten wir schon mal. Das umwandeln auch. :stupid:
![]()
Delphi-Quellcode:
procedure ConvertImageToBitmap(Image: TImage);
var TmpPic: TPicture; begin TmpPic := TPicture.Create; try TmpPic.Bitmap.Assign(Image.Picture.Graphic); Image.Picture.Bitmap.Assign(TmpPic.Bitmap); finally TmpPic.Free; end; end; |
Re: Picture2Bitmap
Zitat:
var und out haben durchaus ihren Sinn, const ändert wie bei allen primitiven Typen (besonders eben LongInt) nicht viel. PS: var-Parameter würde ich bei dieser Funktion nicht benutzen, schließlich ist der vorherige Inhalt des Bitmaps der Funktion schnurzegal. Oder man macht es auf TPs Art ;) . |
Re: Picture2Bitmap
Meine Frage nach "var" war ja auch eher kosmetischer Art.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz