Seite 4 von 4

Re: SQLite und die SELECT Abfrage

Verfasst: 06.12.2010 12:40
von Kiffi

Code: Alles auswählen

EnableExplicit

#myWindow = 0
#myImage = 0

UseJPEGImageDecoder() 
UseJPEG2000ImageDecoder() 
UsePNGImageDecoder() 
UseTIFFImageDecoder() 
UseTGAImageDecoder() 

Define Event
Define Counter
Define CountDroppedFiles
Define DroppedFile.s
Define DroppedFiles.s

If OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 800, 600, "Drag & Drop", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ImageGadget(#myImage, 5, 5, 790, 590, 0, #PB_Image_Border) 
  
  EnableGadgetDrop(#myImage, #PB_Drop_Files, #PB_Drag_Copy)
  
  Repeat
    
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_GadgetDrop
      
      Select EventGadget()
          
        Case #myImage
          
          DroppedFiles = EventDropFiles()
          CountDroppedFiles = CountString(DroppedFiles, Chr(10)) + 1
          
          For Counter = 1 To CountDroppedFiles
            
            DroppedFile = StringField(DroppedFiles, Counter, Chr(10))
            
            If LoadImage(0, DroppedFile)
              SetGadgetState(#myImage, ImageID(0))
            EndIf
            
            Break ; nur das erste Bild verwenden
            
          Next
          
      EndSelect
      
    EndIf
    
  Until Event = #PB_Event_CloseWindow
  
EndIf
In DroppedFile steht der Dateiname. Mit dieser Info (und den Codes, die ich zuvor gepostet
habe) sollte es nun ein leichtes sein, das Bild als BLOB in die Datenbank zu speichern.

Grüße ... Kiffi

Re: SQLite und die SELECT Abfrage

Verfasst: 06.12.2010 16:12
von Velindos
Hallo,
besten Dank für deinen Vorschlag! Da meine spätere Anwendung Menue, Button und Drag&Drop umfasst, versuche ich die Sache in diesem Rahmen zu lösen.
Habe mir ein Beispiel für die Bilder gemacht, wobei ich einmal die Bilder über das Menü lade und des nächsten wo ich Bilder über Drag&Drop einfüge. Anschliesend lege ich das Bild in der Temp ab. Mittels der MemLoad Taste füge ich das Bild wieder ein um es anschliessen mit der SaveDatabase Taste in der Datenbank zu speichern.
Das laden der Bilder funktioniert, das Zwischenspeichern und das Lesen. Aber wenn ich ein Bild per Drop auf das ImageGadget ziehe stürzt die Sache[Das Drag&Drop Ereignis war kein #PB-Drop_Image_Ereigniss], obwohl die selbige in anderen Anwendungen funktioniert.

Code: Alles auswählen

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration
;- Image Plugins
UsePNGImageDecoder()
UseJPEGImageDecoder()
Enumeration    ; Text
  #ToolBar
  #Menu0
  #Menu1
  #Text0
  #Text1
  #Text2
  #Button1
  #Button2
  #Button3
  #Button4
  #MeinBild1
  #MeinBild2
  #MeinBild3
  #MeinBild4
  #MeinImage
  #LoadBild
  #TargetImage
  #Readfile
  #myDropImage
  #myImage
EndEnumeration
;- Image Enumeration
;
Enumeration    ; Images
  ;
  
EndEnumeration
;- Image Globals
Global Image0
Global Image1
Global Image2
Global Image3
Global Image4
Global MyImage



;- Catch Images
;- Images
DataSection
EndDataSection


OpenWindow(#Window_0, 0, 0, 840, 600, "Velindos - Image Converter",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

;Das ist ein Menue
CreateToolBar(#ToolBar, WindowID(0))
ToolBarStandardButton(#Menu0, #PB_ToolBarIcon_Open)
ToolBarStandardButton(#Menu1, #PB_ToolBarIcon_Save)
ImageGadget(#MeinBild1, 30, 30, 220, 210, Image0,#PB_Image_Border)
ImageGadget(#MeinBild2, 495, 30, 220, 210, Image1,#PB_Image_Border)
ImageGadget(#MeinBild3, 30, 295, 250, 220, Image2,#PB_Image_Border)
ImageGadget(#MeinBild4, 495, 295, 250, 220, Image2,#PB_Image_Border)
ButtonGadget(#Button1, 280, 20, 155, 40, "MemSaveFile")
ButtonGadget(#Button2, 280, 295, 155, 40, "MemSaveDrop")
ButtonGadget(#Button3, 330, 455, 155, 40, "MemLoad")  
ButtonGadget(#Button4, 330, 497, 155, 40, "SaveDatabase")  



EnableGadgetDrop(#MeinBild3, #PB_Drop_Files, #PB_Drag_Copy)

Define EventID
Define GadgetID


Repeat
  
  EventID = WaitWindowEvent()
  
  If EventID = #PB_Event_Menu  ; ToolBar are acting as menu
    
    EventID = WaitWindowEvent()
    
    
    
    Select EventMenu()
        
      Case #Menu0 : Debug "Menu1"
        Filename$ = OpenFileRequester("Choose a picture", "", "All Images Formats|*.bmp;*.jpg;*.png;*.tif;*.tga", 0)
        LoadImage(#LoadBild, Filename$)
        SetGadgetState(#MeinBild1, ImageID(#LoadBild))  ; change the picture in the gadget
        
        
        ;Case 1  :Debug "Menu2"
        
    EndSelect
    
    
    
  ElseIf EventID = #PB_Event_Gadget
    
    GadgetID = EventGadget()
    
    Select GadgetID 
        
      Case #Button1 : Debug "SaveFile"
        ImageGadget(#MeinBild2, 495, 30, 220, 210, ImageID(#LoadBild))
        SaveImage(#LoadBild, GetTemporaryDirectory()+"redbox.bmp")
        
        ;Image1=ImageID(#LoadBild)
        ;Image4=ImageID(#LoadBild)
        ;ImageGadget(#MeinBild4, 495, 295, 250, 220, Image4,#PB_Image_Border)
        
        
        
      Case #Button2  :Debug "SaveDrop"
        
        ImageGadget(#MeinBild2, 495, 30, 220, 210, ImageID(#myDropImage))
        SaveImage(#myDropImage, GetTemporaryDirectory()+"redbox.bmp")
        
        
      Case #Button3  :Debug "Load"
        
        If ReadFile(0, GetTemporaryDirectory()+"redbox.bmp")
          length0 = Lof(0) : *filebuffer0 = AllocateMemory(length0) : ReadData(0,*filebuffer0,length0) : CloseFile(0)
        EndIf
        ;*filebuffer0 ist jetzt Bild
        MyImage = CatchImage(0,*filebuffer0)
        ImageGadget(#MeinBild4, 495, 295, 250, 220, MyImage,#PB_Image_Border)
        
        
      Case #Button4  :Debug "SaveDatabase"
        
        
        
        ;Beispiel Datenbank speichern
        ;OpenDatabase(0,DatabaseFile$,"","")
        ;DatabaseUpdate(0, "CREATE TABLE PHOTOS (PIC_1 BLOB, SIZE_1 integer, DESC_1 varchar, PIC_2 BLOB, SIZE_2 integer, DESC_2 varchar)")
        ;SetDatabaseBlob(0, 0, *filebuffer0, Length0)
        ;desc_1$ = "Red Box"
        ;sql$ = "INSERT INTO PHOTOS (PIC_1, SIZE_1, DESC_1, PIC_2, SIZE_2, DESC_2 ) values ( ?, " + "'" + Str(Length0) + "', '" + desc_1$+"', ?, " + "'" + Str(Length1) +"', '" + desc_2$ + "');"
        ;DatabaseUpdate(0, sql$)
        
    EndSelect
    
    
  ElseIf EventID = #PB_Event_GadgetDrop
    Select EventGadget()
      Case #MeinBild3
        If EventDropImage(#myDropImage)
          SetGadgetState(#MeinBild3, ImageID(#myDropImage))
          ImageGadget(#MeinBild3, 30, 295, 250, 220, ImageID(#myDropImage),#PB_Image_Border)
        EndIf
        
    EndSelect    
    
  EndIf   
  
Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button



End   ; All is automatically freed by PureBasic

;Wenn Du ein Bild (=Binärdatei) in eine Textdatei speichern willst, musst Du die Binärdaten
;vorher in Base64 wandeln (Stich-/Suchwörter für Dich Base64Decoder() / Base64Encoder()).
Gruss ... Velindos

Re: SQLite und die SELECT Abfrage

Verfasst: 06.12.2010 18:29
von Kiffi
@Velindos: Wo habe ich denn im Vorposting was von EventDropImage() geschrieben?

Ich helfe ja gern, aber Du solltest auch das lesen, was ich schreibe.
Denn so, wie es im Moment läuft, macht es keinen Spass mehr.

Grüße ... Kiffi

Re: SQLite und die SELECT Abfrage

Verfasst: 07.12.2010 10:51
von Velindos
Hallo,
bleib mal cool!!! Hat ja niemand gesagt das du etwas falsch geschrieben hast! Sondern ich wollte nur den Stand meiner Versuche mitteilen.

Habe in der Zwischenzeit den Fehler in meiner Routine entdeckt:
EnableGadgetDrop(#MeinBild3, #PB_Drop_File, #PB_Drag_Copy)
Sollte das Image angeben und nicht das File, also so:
EnableGadgetDrop(#MeinBild3, #PB_Drop_Image, #PB_Drag_Copy)
Dadurch kippte mir das Programm weg.

Hoffe du beruhigst dich wieder und hasst wieder Spass an den Fragen! Nicht vergessen ich bin Anfänger mit einen Hang zum hacken!!! Momentan läuft die Sache schon ganz gut, habe nur noch das Problem das ich das mit den Bildern richtig verstehe.
Wollte mit SaveImage das gedropte Bild als *.Bmp speichern,
SaveImage(#myDropImage, ":memory:"+"redbox.bmp")
um es anschliessend mit ReadFile wieder zu lesen, um auf mein *buffer und *size zu kommen.
Funktioniert noch nicht, forsche weiter.

Gruss ... Velindos

Re: SQLite und die SELECT Abfrage

Verfasst: 07.12.2010 15:09
von Velindos
Hallo,
hier der Abschluss meines Beispieles für das Aufbereiten eines DropBildes für die Datenbank.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Image Plugins
UsePNGImageDecoder()
UseJPEGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageEncoder()


Enumeration
  #MeinBild1
  #MeinBild3
  #MeinBild4
  #Button1
  #Button2
  #Button3
  #Button4
  #Text_0
  #Text_1
  #Text_2
EndEnumeration
;-Images
Enumeration
  #test
  #myDropImage
  #SpeicherImage
  #ZeichenImage
  #MyImage
EndEnumeration

Global Bildvorhanden
Global SpeicherBild


LoadImage (#test,"C:\velindos.bmp")
Debug "File geladen"

#SavePath = "C:\Temp\"



OpenWindow(#Window_0, 0, 0, 840, 600, "Velindos - Image Converter",#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
ImageGadget(#MeinBild1, 30, 30, 220, 210, Image0,#PB_Image_Border)
ImageGadget(#MeinBild3, 30, 295, 250, 220, Image2,#PB_Image_Border)
ImageGadget(#MeinBild4, 495, 295, 250, 220, Image2,#PB_Image_Border)
ButtonGadget(#Button1, 280, 20, 155, 40, "Empty")
ButtonGadget(#Button2, 280, 295, 155, 40, "SaveDropBild")
ButtonGadget(#Button3, 330, 455, 155, 40, "Empty") 
ButtonGadget(#Button4, 330, 497, 155, 40, "ReadDropBild") 
EnableGadgetDrop(#MeinBild3, #PB_Drop_Image, #PB_Drag_Copy)
TextGadget(#Text_0, 15, 275, 200, 20, "DropBild hierher ziehen")
TextGadget(#Text_1, 495, 280, 240, 15, "DropBild wurde gespeichert")
TextGadget(#Text_2, 20, 5, 155, 20, "DropBild wurde eingelesen")



Repeat
  
  EventID = WaitWindowEvent()
  
  If  EventID = #PB_Event_Gadget
    
    GadgetID = EventGadget()
    
    Select GadgetID 
        
      Case #Button1 : 
        ImageGadget(#MeinBild1, 30, 30, 220, 210, ImageID(#test),#PB_Image_Border)
        
        SaveImage (#test,"C:\VelindosImage.bmp")
        
        
      Case #Button2
        Debug Bildvorhanden
        If Bildvorhanden > 0       
          
          If CreateImage(SpeicherBild, ImageWidth(#myDropImage), ImageHeight(#myDropImage))
            If StartDrawing(ImageOutput(SpeicherBild))
              
              DrawImage(ImageID(#myDropImage),0,0)
              StopDrawing()
              
              Debug "Saving redrawn Image"
              ;SaveImage(SpeicherBild, GetTemporaryDirectory()+"Dropbox.bmp")
              res = SaveImage(SpeicherBild, #SavePath+"redrawn clipboard Image.bmp")
              
              Debug "res: " + Str(res)
              
            EndIf
          EndIf   
          
          ImageGadget(#MeinBild4, 495, 295, 250, 220, ImageID(#myDropImage),#PB_Image_Border)
          
        EndIf
        
        
        
        
      Case #Button3
        
        
        
        
        
      Case #Button4
        
        
        ;If ReadFile(#SpeicherImage, GetTemporaryDirectory()+"Dropbox.bmp")
        If ReadFile(#SpeicherImage, #SavePath+"redrawn clipboard Image.bmp")
          length0 = Lof(#SpeicherImage) : *filebuffer0 = AllocateMemory(length0) : ReadData(#SpeicherImage,*filebuffer0,length0) : CloseFile(#SpeicherImage)
        EndIf
        Debug *filebuffer0
        MyImage = CatchImage(0,*filebuffer0)
        ImageGadget(#MeinBild1, 30, 30, 220, 210, MyImage,#PB_Image_Border)
        
        
        
        
        
        
    EndSelect    
  ElseIf EventID = #PB_Event_GadgetDrop
    Select EventGadget()
      Case #MeinBild3
        If EventDropImage(#myDropImage)
          SetGadgetState(#MeinBild3, ImageID(#myDropImage))
          Bildvorhanden =1
        EndIf
        
    EndSelect    
  EndIf   
  
Until EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button

Viel Spaß beim Betatesten!!!(War Spass)

Grüsse :bounce: Velindos