Seite 1 von 1
Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 13:19
von ppcfox
Hallo zusammen,
ich bin neu in der Purebasic-Gemeinde und benutze PB um kleinere Tool zu entwickeln. Ich habe mich für PB entschieden, da ich mit dem Ganzen .Net-Geraffel nichts zu
tun haben wollte. Komme auch soweit klar und habe mein erstes Tool fast fertig. Was mir nur dabei aufgefallen ist, wenn ich mein Programm innerhalb der Entwicklungsumgebung
starte funktioniert alles wunderbar, wenn ich es als EXE kompiliere sind die Ergebnisse anders. Um genauer zu sein, es handelt sich um ein kleines Tool mit dem Bilder (jpg) z. B. von
einer Kamera, bzw. Verzeichnis gelesen werden und anschließend in einem bestimmten Verzeichnis komprimiert, mit einem "Stempel" versehen werden. Ich benutze dazu die PB-Funktion ResizeImage.
Wie gesagt in der Entwicklungsumgebung funktioniert alles wunderbar, als EXE kompiliert erhalte ich nur ein schwarzes Bild. Zum Einsatz kommt PB 5.11 32bit und Win 7 64bit.
Kann mir vielleicht jemand erklären was ich falsch mache?
Vielen Dank für eure Unterstützung
Jörg
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 13:41
von RSBasic
Kann es vielleicht sein, dass deine Anwendung aufgrund des aktuellen Arbeitsverzeichnisses das Bild nicht finden kann? Nutzt du absolute oder relative Pfade fürs Öffnen deiner Bilder?
Kannst du den Code von der Funktion, die deine Bilder öffnen soll, posten?
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 13:42
von NicTheQuick
Wie immer ist es schwer eine Antwort zu geben, wenn ein Beispielcode fehlt, an dem man das ganze Problem nachvollziehen kann.
Was genau meinst du damit, dass du nur ein schwarzes Bild erhältst? Welches Bild ist schwarz? Die verkleinerte Version deiner Bilder im Zielverzeichnis? Die Anwendung selbst ist schwarz? Nutzt du einen Screen und Sprites oder geht das alles mit der normalen 2DDrawing-Bibliothek? Fragen über Fragen!
Etwas mehr Infos brauchen wir noch, denn Nachfragen kostet uns und dir Zeit.

Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 14:00
von Kevin
Kann es sein, dass du so was machst
?
beim Kompilieren wird die Zeile wegen dem "Debug" Ignoriert.
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 14:01
von Kiffi
ich vermute mal, dass da irgendwo ein
steht. Dieser Aufruf wird nur bei eingeschaltetem Debugger ausgeführt, jedoch nicht in der finalen EXE.
Grüße ... Kiffi
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 17:46
von STARGÅTE
Eine weitere Fehlerquelle kann ein relativer Pfad sein, denn dieser hätte auf PB heraus einen anderen absoluten Pfad, als aus der EXE
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 17:52
von ppcfox
Vielen Dank für die schnelle Hilfe hier im Forum.
Hier mal die Prozedur in abgekürzter Form:
Code: Alles auswählen
Procedure CompressAndLabelImage()
UseJPEGImageDecoder()
Define PosX.i, PosY.i
Define bildorg.l
Define giStempelPosition.i = 0
Define sOrg.s = "C:\Server\Org.jpg"
Define sDest.s = "C:\Server\Dest.jpg"
bild = LoadImage(#PB_Any, sOrg)
If bild
StartDrawing(ImageOutput(bild))
If OutputWidth() > 800 And OutputHeight() > 600
If Not ResizeImage(bild, 800, 600)
MessageRequester("Resize","Fehler beim Verkleinern des Bildes")
EndIf
EndIf
Select giStempelPosition
Case 0 ;LO
PosX = 800 / 100 * 5
PosY = 600 / 100 * 5
Case 1 ;LU
PosX = 800 / 100 * 5
PosY = 600 - (600 / 100 * 5)
Case 2 ;RO
PosX = 800 - (800 / 100 * 5) - TextWidth("123456 - ABCDEFG")
PosY = 600 / 100 * 5
Case 3 ;RU
PosX = 800 - (800 / 100 * 5) - TextWidth("123456 - ABCDEFG")
PosY = 600 - (600 / 100 * 5)
Default ;LU
PosX = 800 / 100 * 5
PosY = 600 - (600 / 100 * 5)
EndSelect
DrawText(PosX,PosY,"123456 - ABCDEFG",#Black, #White)
StopDrawing()
If Not SaveImage(bild, sDest)
MessageRequester("Sichern", "Fehler beim Speichern des Bildes")
EndIf
FreeImage(bild)
EndIf
EndProcedure
CompressAndLabelImage()
Es wird ein Bild mit 800x600 erzeugt, aber eben nur ein komplett schwarzes.
Gruß Jörg
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 18:07
von STARGÅTE
Ich behaupte mal das du innerhalb des DrawingBlocks kein ResizeImage() machen darfst, dann das ändert ja den DrawingBuffer.
Warum das mit Debugger läuft weiß ich nicht.
Setzt das Resize vor StartDrawing() und ersetze dann OutputW/H durch ImageW/H:
Code: Alles auswählen
If ImageWidth(bild) > 800 And ImageHeight(bild) > 600
If Not ResizeImage(bild, 800, 600)
MessageRequester("Resize","Fehler beim Verkleinern des Bildes")
EndIf
EndIf
Re: Ausführen in der Entwicklungsumgebung vs. Exe
Verfasst: 28.06.2013 18:19
von ppcfox
Genau das wars. Steht auch so in der Hilfe - war doch ne anstrengende Woche.
Vielen Dank.