Seite 1 von 1

Bild in Speicher laden

Verfasst: 11.08.2015 12:17
von ProgOldie
Ich möchte mit dem an der Stelle 'Adresse' gespeicherte Bild
zwei Dinge tun:
1. Es mit setDatabaseBlob() zum Speichern in einer DB vorbereiten
2. Eine auf die Maße W(Breite) und H(Höhe) reduzierte Kopie in einem
ImageGadget mit der Nummer ImGadNr anzuzeigen.

Code: Alles auswählen

#Orig=0
#Resized=1

;---- zu 1. ---------------------
LoadImage(#Orig,Adresse)
ReadFile(0,Adresse)
size_orig = Lof(0)
If size_orig
  *mem_orig = AllocateMemory(size_orig)
  If *mem
    ReadData(0, *mem_orig, size)
    SetDatabaseBlob(DBNr,0,*mem_orig,size_orig) 
  EndIf
EndIf
CloseFile(#Orig)

;---- zu 2.----------------
CopyImage(#Orig,#Resized)
ResizeImage(#Resized,W,H)
*mem_res=EncodeImage(#Resized) 
size_res=MemorySize(*mem_res)
CatchImage(#Resized,*mem_res,size_res)
SetGadgetState(ImGadNr,ImageID(#Resized))

;(Speicherfreigaben jeweils weggelassen)
Ich habe Sorge, mir bei einem Fehler durch einen Test den Speicher zu ruinieren. Daher:
a) Ist das Fragment so richtig?
b) Muss(!) man bei EncodeImage() auch noch das Bildformat bei den Parametern angeben, oder
reicht es, den passenden Decoder bzw. alle Decoder zu laden?

Re: Bild in Speicher laden

Verfasst: 11.08.2015 12:57
von HeX0R
Nach dem ResizeImage hast Du doch bereits deine ImageID, wozu spielst Du da noch mit dem Speicher rum?

Re: Bild in Speicher laden

Verfasst: 11.08.2015 14:46
von ProgOldie
Hallo HeXOR, zunächst danke.

Code: Alles auswählen

CopyImage(#Orig,#Resized)
ResizeImage(#Resized,W,H)
;...Herumspielerei im Speicher weggelassen 
SetGadgetState(ImGadNr,ImageID(#Resized))
So müsste es dann richtig sein.

Re: Bild in Speicher laden

Verfasst: 11.08.2015 19:04
von ProgOldie
Noch eine Frage dazu. Wie gehe ich vor, wenn ich ein Bild als BLOB geladen habe und im Imagegadget anzeigen will, wobei die Bildabmessungen auf die Größe W(Breite) und H(Höhe) resized sein soll?

Code: Alles auswählen

size = DatabaseColumnSize(DBNr,1)
If size
  *mem = AllocateMemory(size)
  If *mem
    If GetDatabaseBlob(DBNr,1, *mem, size)
      ImID=CatchImage(#PB_Any, *mem,size)
      SetGadgetState(ImGadNr,ImageID(ImID))
    EndIf 
  EndIf
EndIf 

Wie baut man darin resizeImage() ein?

Re: Bild in Speicher laden

Verfasst: 11.08.2015 20:37
von mhs
Ganz einfach, du führst ResizeImage auf die ImID aus, die du von CatchImage erhalten hast:

Code: Alles auswählen

size = DatabaseColumnSize(DBNr,1)
If size
  *mem = AllocateMemory(size)
  If *mem
    If GetDatabaseBlob(DBNr,1, *mem, size)
      ImID=CatchImage(#PB_Any, *mem,size)

      ResizeImage(ImID, W, H)

      SetGadgetState(ImGadNr,ImageID(ImID))
    EndIf 
  EndIf
EndIf 


Re: Bild in Speicher laden

Verfasst: 11.08.2015 21:19
von ProgOldie
Danke, auf die einfachsten Dinge kommt man oft nicht.