Bilder einlesen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Bilder einlesen
Kann jemand mir einen Einstieg geben, wie ich Bilder in eine Datenbank einlese? Mir fehlt irgendwie der Einsatzpunkt.
Ich habe eine FOXCDX, als Felder Typ "V". Was ja wohl das allerbeste dafür ist.
Jan
Ich habe eine FOXCDX, als Felder Typ "V". Was ja wohl das allerbeste dafür ist.
Jan
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Jan,
memoread() sollte man eigentlich nicht für Binärdaten verwenden, auch wenn ich damit noch keine Probleme hatte. Bei den Tools gibt es FileStr() oder StrFile() - bin mir nicht sicher - und in der Wissensdatenbank habe ich Funktionen für lowlevel Datei lesen und schreiben hinterlegt.
Keinesfalls MemoWrit() zum Schreiben verwenden, da dieser ein chr(26) anhängt !
Code: Alles auswählen
cBild := memoread("bild.bmp")
...
replace BildFeld with cBild // FOXCDX Typ V
Keinesfalls MemoWrit() zum Schreiben verwenden, da dieser ein chr(26) anhängt !
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
ich habe es zwar noch nicht mit FOXDBE probiert, aber ich meine bei DATUM, LOGISCH und Memofeldern ist der von dir angegebene Wert egal, da Xbase++ automatisch den Richtigen einträgt.
Ich vermute, dass DBFDBE bei Memos immer 10 und bei FOXDBE immer 4 Stellen benötigt und daher auch einsetzt. Die 4 Stellen reichen, da der Offsetwert in der Memodatei als gepackte Zahl gespeichert wird und daher weniger Platz als bei DBFDBE braucht.
ich habe es zwar noch nicht mit FOXDBE probiert, aber ich meine bei DATUM, LOGISCH und Memofeldern ist der von dir angegebene Wert egal, da Xbase++ automatisch den Richtigen einträgt.
Ich vermute, dass DBFDBE bei Memos immer 10 und bei FOXDBE immer 4 Stellen benötigt und daher auch einsetzt. Die 4 Stellen reichen, da der Offsetwert in der Memodatei als gepackte Zahl gespeichert wird und daher weniger Platz als bei DBFDBE braucht.
Zuletzt geändert von brandelh am Mi, 27. Feb 2008 12:12, insgesamt 1-mal geändert.
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo ihr beiden,
Ich hab das jetzt mal mit 10 versucht, funktioniert einwandfrei. Ich werd das auch mal mit 4 versuchen. Allerdings ist das aus Platzgründen nicht ganz so wild wie bei Jimmy. Ich werde nur max ca. 500 Sätze haben.
Ich arbeite inzwischen grundsätzlich mit FOXCDX. Ich seh da einfach eine ganze menge Vorteile für mich. Ich habe da die Sequenz-Felder, nur eine Indexdatei, die ich mit gleichem Namen benenne wir die dbf (macht es für mich übersichtlich). Die beiden Punkte sind für mich die wichtigsten. Angeblich soll ja auch die Performance besser sein. Was ich mangels riediger Datenmengen nicht wirklich nachvollziehen kann. Und das mit den Bildern im memofeld schien mir auch einfacher zu sein. Bis zu dem Beitrag oben von Tom. Man lernt halt immer dazu
Und jetzt noch eine Frage: Nach dem Hinweis von Hubert hab ich jetzt ein paar Testbilder sauber einlesen können. Aber wie bekomme ich die wieder raus und zeige die auf dem Bildschirm an? Die Bildschirmanzeige mit Recourcen-Bildern klappt ja, da mache ich das über :load(). Aber hier beißte ich irgendwie auf Granit.
Jan
Ich hab das jetzt mal mit 10 versucht, funktioniert einwandfrei. Ich werd das auch mal mit 4 versuchen. Allerdings ist das aus Platzgründen nicht ganz so wild wie bei Jimmy. Ich werde nur max ca. 500 Sätze haben.
Ich arbeite inzwischen grundsätzlich mit FOXCDX. Ich seh da einfach eine ganze menge Vorteile für mich. Ich habe da die Sequenz-Felder, nur eine Indexdatei, die ich mit gleichem Namen benenne wir die dbf (macht es für mich übersichtlich). Die beiden Punkte sind für mich die wichtigsten. Angeblich soll ja auch die Performance besser sein. Was ich mangels riediger Datenmengen nicht wirklich nachvollziehen kann. Und das mit den Bildern im memofeld schien mir auch einfacher zu sein. Bis zu dem Beitrag oben von Tom. Man lernt halt immer dazu
Und jetzt noch eine Frage: Nach dem Hinweis von Hubert hab ich jetzt ein paar Testbilder sauber einlesen können. Aber wie bekomme ich die wieder raus und zeige die auf dem Bildschirm an? Die Bildschirmanzeige mit Recourcen-Bildern klappt ja, da mache ich das über :load(). Aber hier beißte ich irgendwie auf Granit.
Jan
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
ich denke, dass egal ob du 4 oder 10 angibst, intern immer 4 bei FoxDBE genutzt werden, er braucht einfach nicht mehr.Jan hat geschrieben:Hallo ihr beiden,
Ich hab das jetzt mal mit 10 versucht, funktioniert einwandfrei. Ich werd das auch mal mit 4 versuchen. Allerdings ist das aus Platzgründen nicht ganz so wild wie bei Jimmy.
Das einlesen des Bildes in eine Speichervariable geht ganz einfach:
cBild := db->BildFeld
Bei der Anzeige in einem XbpBitmap Objekt hingegen bin ich mir nicht sicher, ob du das zuerst wieder speichern und erneut laden musst (das ist von der Syntax einfach ...) oder ob es mit load() oder setbuffer() auch direkt geht.
Jimmy hat in dem List&Label Thread doch mal was in die Richtung geschrieben ...
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Hallo Hubert,
Danke für den Hinweis, aber inzwischen habe ich die Lösung gefunden. Einlesen des Bildes habe ich gemacht wie Du es angibst. Sehr simpel. Das Anzeigen ist ebenfalls sehr einfach. Das funktioniert wie bei einer recource, aber statt :load() nehme ich :setBuffer(cBild) Und schwupp - ist das Bild da. Also nicht, wie Du schlimmstenfalls vermutet hast, mit zwischenspeichern. Sondern direkt. Das Zwischenspeichern war doch Jimmys Problem mit den Reportgeneratoren gewesen, oder?
Tolle Sache das ganze!
Jan
Danke für den Hinweis, aber inzwischen habe ich die Lösung gefunden. Einlesen des Bildes habe ich gemacht wie Du es angibst. Sehr simpel. Das Anzeigen ist ebenfalls sehr einfach. Das funktioniert wie bei einer recource, aber statt :load() nehme ich :setBuffer(cBild) Und schwupp - ist das Bild da. Also nicht, wie Du schlimmstenfalls vermutet hast, mit zwischenspeichern. Sondern direkt. Das Zwischenspeichern war doch Jimmys Problem mit den Reportgeneratoren gewesen, oder?
Tolle Sache das ganze!
Jan
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Jan,
schön dass es einfach geht ... und eben fällt mir ein, dass das MDI und SDI Beispiel doch auch sowas macht oder ?
Ja die laden auch aus einer DBF / FPT Kombination, allerdings haben sie wieder eine eigene Klasse gebastelt, die es einfacher machen soll aber für mich umständlicher erscheint. So hat halt jeder seine Vorlieben.
schön dass es einfach geht ... und eben fällt mir ein, dass das MDI und SDI Beispiel doch auch sowas macht oder ?
Ja die laden auch aus einer DBF / FPT Kombination, allerdings haben sie wieder eine eigene Klasse gebastelt, die es einfacher machen soll aber für mich umständlicher erscheint. So hat halt jeder seine Vorlieben.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
hi,
(p.s. man kann auch Bitmap in DBFNTX Memo mit :setbuffer() "speichern")
Der Unterschied von den beiden zu den Alaska MDI Beispiel ist das man
im Memofeld dann das "gesamte" Bitmap inclusive des 14 Byte Header
hat. Das "kann" nun "helfen" oder "stören" je nachdem was man dann
mit dem Bitmaps vor hat.
Alaska geht immer den Weg über ein Bitmap Object. Zum "laden" nimmt
man da :loadfile() bei "externen" und :setbuffer() bei "internen" Bitmaps.
Zum "speichern" des Bitmap Object nimmt Alaska :setbuffer() wobei dann
die besagten 14 Byte des Header nicht im Memo abgespeichert werden.
Das war auch meine Ausgangs Basis.brandelh hat geschrieben: ... und eben fällt mir ein, dass das MDI und SDI Beispiel doch auch sowas macht oder ?
brandelh hat geschrieben: cBild := memoread("bild.bmp")
Bevor ich List & Label verwendet habe hätte ich gesagt "das ist falsch".Tom hat geschrieben: Str2Hex(FileStr("c:\bilder\meinbild.jpg"))
(p.s. man kann auch Bitmap in DBFNTX Memo mit :setbuffer() "speichern")
Der Unterschied von den beiden zu den Alaska MDI Beispiel ist das man
im Memofeld dann das "gesamte" Bitmap inclusive des 14 Byte Header
hat. Das "kann" nun "helfen" oder "stören" je nachdem was man dann
mit dem Bitmaps vor hat.
Alaska geht immer den Weg über ein Bitmap Object. Zum "laden" nimmt
man da :loadfile() bei "externen" und :setbuffer() bei "internen" Bitmaps.
Zum "speichern" des Bitmap Object nimmt Alaska :setbuffer() wobei dann
die besagten 14 Byte des Header nicht im Memo abgespeichert werden.
gruss by OHR
Jimmy
Jimmy