Ausführen in der Entwicklungsumgebung vs. Exe

Anfängerfragen zum Programmieren mit PureBasic.
ppcfox
Beiträge: 3
Registriert: 28.06.2013 11:59
Computerausstattung: MacBook Pro, OS X 10.8 mit Parallels u. Win 7 64bit
Wohnort: Trier, Germany

Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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! :D

Etwas mehr Infos brauchen wir noch, denn Nachfragen kostet uns und dir Zeit. ;)
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag von Kevin »

Kann es sein, dass du so was machst

Code: Alles auswählen

Debug LoadImage(...)
?
beim Kompilieren wird die Zeile wegen dem "Debug" Ignoriert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag von Kiffi »

ich vermute mal, dass da irgendwo ein

Code: Alles auswählen

Debug [IrgendWas]
steht. Dieser Aufruf wird nur bei eingeschaltetem Debugger ausgeführt, jedoch nicht in der finalen EXE.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
ppcfox
Beiträge: 3
Registriert: 28.06.2013 11:59
Computerausstattung: MacBook Pro, OS X 10.8 mit Parallels u. Win 7 64bit
Wohnort: Trier, Germany

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
ppcfox
Beiträge: 3
Registriert: 28.06.2013 11:59
Computerausstattung: MacBook Pro, OS X 10.8 mit Parallels u. Win 7 64bit
Wohnort: Trier, Germany

Re: Ausführen in der Entwicklungsumgebung vs. Exe

Beitrag von ppcfox »

Genau das wars. Steht auch so in der Hilfe - war doch ne anstrengende Woche.
Vielen Dank.
Antworten