Fehler bei zig images in einem Imagebuffer......

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

mkorth

Betreff: Fehler bei zig images in einem Imagebuffer......

BeitragMi, Mai 27, 2009 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Für mein aktuelles Projekt habe ich mir ein Programm geschrieben, das erstellte Einzelbilder zusammenfasst, stripe daraus baut und dann das fertige image abspeichert.

er erstellt ein neues Bild mit den maßen (breite*anzahl bilder, y)

danach:

----Schleife bis fertig------
lädt ein bild(pufferbild)
setzt imagebuffer
schreibt an passender position
setzt wieder backbuffer
macht freeimage pufferbild
-------------------------------------

Danach schreibt er das erstellte bild als bmp auf platte...


Es funktioniert alles....

jedenfalls solange wie ich nur ein paar Bilder habe... Sobald ich z.b. 50 oder so habe bei 320,200 z.B., wird das image schon mit den korrekten Dimensionen, jedoch aber ab dem xxten... (ab Bild 14) Bild, verzerrt geschrieben und der Inhalt der da abgebildet wird gleicht eher einem Screenshot des Desktops, sofern man es definieren kann.


Gibt es irgendwelche Beschränkungen bei Imagebuffer ? z.B. bei der Größe(eine absolute maxgröße)?

Hat jemand, ohne hier ellenlang code zu posten eine Vermutung woran es liegen kann?


Vielen Dank,
mkorth

Wie gesagt.... Programm funktioniert einwandfrei... erst nach dem xx.ten Bild treten diese effekte auf.


[EDIT]
Nachtr. Info: Ich lasse mir auch alle images anzeigen die geladen werden... die quellbilder sind sauber.

Xeres

Moderator

BeitragMi, Mai 27, 2009 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code - keine Ahnung was du falsch machst. Es gibt meines Wissens keine derartigen Probleme mit dem erstellen oder bearbeiten von Bildern.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

mkorth

BeitragMi, Mai 27, 2009 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
na dann mal den vollen code


Code: [AUSKLAPPEN]


AppTitle "ImageSequenzer V1","Die Anwendung wirklich verlassen?"


Graphics 640,480,16,2

Global QDateiname$
Global ZDateiname$
Global Bildnummer1$
Global Bildmaxnummer$
Global suffix$
Global Arbeit
Global fertig
Global init
Global Bildinfobild
Global Breite, Hoehe
Global Bilderanzahl
Global erstes,letztes
Global megaimage
Global Frameaktuell
Global pufferbild
Global bildnummer1laenge
Global bildaktuell
Global working
Global jobdone
Global loopimage
Global imageloopini
Global bildcounter


frameaktuell = 0
jobdone = False
working = False
fertig = False
Arbeit = False
QDateiname$ = "nichts gewählt"
ZDateiname$ = "nichts gewählt"
Suffix$ = ".xxx"


frametimer = CreateTimer (30)


ClsColor 0,0,0
Color 255,255,255

SetBuffer BackBuffer()

While Not KeyHit(1) Or ende = 1



Cls


Text 320,200,"ImageSequenzer V1",1,1

Text 320,260,"1 - QuellDateiname: "+QDateiname$,1,1
Text 320,280,"2 - Zieldateiname: "+ZDateiname$,1,1
Text 320,300,"3 - erstes Bild: "+Bildnummer1,1,1
Text 320,320,"4 - letztes Bild: "+Bildmaxnummer,1,1
Text 320,340,"5 - Dateiendung (Jpg,Jpeg,Png,Bmp): "+suffix$,1,1
Text 320,360,"6 - Imagesequenzer Starten",1,1
Text 320,380,"7 - Anwendung beenden",1,1

If jobdone = True Then
Text 320,400,"8 - erstellte Sequenz laden und in loop abspielen",1,1
EndIf

Line 0,220,640,220
Line 0,180,640,180
If fertig = True Then
Text 320,100,"Datei "+Zdateiname$+suffix$+" wurde erstellt",1,1
DrawImage Bildinfobild,1,1
Text 460,20,"Formatbreite: "+Breite
Text 460,40,"Formathoehe:  "+Hoehe
Text 460,60,"Gesamtbilder: "+Bilderanzahl
Text 460,80,"Endbreite:    "+Breite*Bilderanzahl
;------------------------------------------------

EndIf


If arbeit = False Then
;--------1------------
If  KeyHit (2) Then
    FlushKeys
    Text 10,40,"(bis dahin wo sich Zahlen ändern ohne suffix (.xxx))"
    Locate 10,20
    QDateiname = Input ("Bitte Den Dateinamen angeben : ")
    FlushKeys
EndIf
;--------1------------


;--------2------------
If  KeyHit (3) Then
    FlushKeys
    Text 10,40,"(Den gewünschten Dateinamen der erstellten Imagesequenz)"
    Locate 10,20
    ZDateiname = Input ("Bitte Den Dateinamen angeben : ")
    FlushKeys
EndIf
;--------2------------



;--------3------------
If  KeyHit (4) Then
    FlushKeys
    Text 10,40,"(Das erste Bild der Serie - Bsp: test0001.png = 0001)"
    Locate 10,20
    Bildnummer1 = Input ("Bitte Anfangsnummer (incl. vorgestellten Nullen) eingeben: ")
    FlushKeys
EndIf
;--------3------------


;--------5------------
If  KeyHit (6) Then
    FlushKeys
    Text 10,40,"(Die Dateiendung eingeben - test.png = .png - Grosskleinschrift beachten)"
    Locate 10,20
    suffix$ = Input ("Bitte den suffix der Quelldatei angeben: ")
    FlushKeys
EndIf
;--------5------------



;--------4------------
If  KeyHit (5) Then
    FlushKeys
    Text 10,40,"(Das letzte Bild der Serie - Bsp: test0011.png = 0011)"
    Locate 10,20
    Bildmaxnummer = Input ("Bitte Endnummer (incl. vorgestellten Nullen) eingeben: ")
    FlushKeys
EndIf
;--------4------------



;--------6------------
If  KeyHit (7) Then
    Text 320,40,"Arbeit wird eingeleitet............",1,1
    Arbeit = True
    FlushKeys
EndIf
;--------6------------




;--------7------------
If KeyHit(8) Then
   ende = 1
EndIf
;--------7------------
EndIf


If jobdone = True Then
   ;--------8------------
   If KeyHit(9) Then
      playimage= True
      FlushKeys
   EndIf
   ;--------8------------
EndIf

If playimage = True Then imageloop()



If Arbeit = True Then
bildseq()
EndIf


Flip
WaitTimer (frametimer)

Wend


;------erstellte sequenz laden-----
;------und loopen------------------
Function imageloop()

If imageloopini = False Then
   loopimage = LoadAnimImage (Zdateiname$+".bmp",Breite,Hoehe,0,Bilderanzahl)
   imageloopini = True
   Bilcounter = 0
EndIf

If imageloopini = True Then
   
  DrawImage loopimage,100,100,Bildcounter
  Bildcounter = Bildcounter +1
  If bildcounter = Bilderanzahl Then Bildcounter = 0
   

EndIf


End Function
;----------------------------------



;----------------Die function zum zusammenfügen-----------------
Function bildseq()


;initialisieren----------
If Fertig = False
   If Init = False
   Bildinfobild = LoadImage (QDateiname$+Bildnummer1$+suffix$)
   Breite = ImageWidth (Bildinfobild)
   Hoehe = ImageHeight (BildinfoBild)
   ResizeImage Bildinfobild,Int(Breite/5),Int(Hoehe/5)
   bildnummer1laenge = Len (Bildnummer1$) 
   erstes = Int(Bildnummer1$)
   letztes = Int(Bildmaxnummer$)
   Bilderanzahl = (letztes - erstes)+1
   megaimage = CreateImage (Breite*Bilderanzahl,Hoehe)
   init = True
   working = True
   Frameaktuell = 0
   EndIf
EndIf
;----------------------

;---aus der Ini bekannte Daten anzeigen----------
Text 320,100,QDateiname$+Bildnummer1$+suffix$,1,1
DrawImage Bildinfobild,1,1
Text 460,20,"Formatbreite: "+Breite
Text 460,40,"Formathoehe:  "+Hoehe
Text 460,60,"Gesamtbilder: "+Bilderanzahl
Text 460,80,"Endbreite:    "+Breite*Bilderanzahl
;------------------------------------------------


;---Framestring wandeln zum laden----------------
;---Pufferframe laden und setzen-----------------
;------------------------------------------------
If working = True

   If Frameaktuell < Bilderanzahl Then
      Bildaktuell = erstes+frameaktuell
      Bildaktuellstring$ = Str (Bildaktuell)
      bildaktuelllaenge = Len (Bildaktuellstring$)
      pufferbild = LoadImage (QDateiname$+(Left$(Bildnummer1$,(Bildnummer1laenge-Bildaktuelllaenge)))+(Right$(Bildaktuellstring$,Bildaktuelllaenge))+suffix$)   
      SetBuffer ImageBuffer (megaimage)
      DrawImage pufferbild,(Frameaktuell*Breite),0
      SetBuffer BackBuffer ()   
      ResizeImage Pufferbild,Int(Breite/5),Int(Hoehe/5)
      DrawImage pufferbild,200,0
      FreeImage (pufferbild)
      Frameaktuell = Frameaktuell + 1
   Else
      SaveImage (megaimage,ZDateiname$+".bmp")     
      Working = False
      fertig = True
      Arbeit = False
      jobdone = True
      FreeImage (megaimage)
   EndIf




EndIf
;-----------------------------------------------





End Function
;---------------------------------------------------------------



Also ich setze mittlerweile fast immer alle vars als global.. nicht meckern... hoffe da kann man durchsteigen.
ist übrigens komplett und somit lauffähig..

Die images, z.B. bild0001, bild0002 etc muessen im gleichen verzeichniss sein und selbes format aufweisen.
[EDIT]einen Fehler beseitigt der 1 an Breite abzieht... ergebniss bleibt jedoch gleich was das Verzerren ab Bild 14 angeht...

Xeres

Moderator

BeitragMi, Mai 27, 2009 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Timer benutz auch gleich Flip(0).
Bilderanzahl ist das selbe wie Frames,also CreateImage(Breite,Hoehe,Bilderanzahl)
Du benutzt irgendwie viele Steuervariablen:
Code: [AUSKLAPPEN]
Working = False
fertig = True
Arbeit = False
jobdone = True

Benutz dafür besser eine Globale Variable und ein paar Konstanten
z.B.
Code: [AUSKLAPPEN]
Global Modus
Const Modus_Initalisieren=0, Modus_Arbeiten=1, Modus_Arbeit_beenden=2, Modus_Anzeigen=3

Benutze beim Debugen die Funktionen von BB...
Code: [AUSKLAPPEN]
pufferbild = LoadImage (QDateiname$+(Left$(Bildnummer1$,(bildnummer1laenge-Bildaktuelllaenge)))+(Right$(Bildaktuellstring$,Bildaktuelllaenge))+suffix$)   
If pufferbild <> 0 Then
   DebugLog("PufferBild "+Frameaktuell+" Geladen")
Else
   DebugLog("FEHLER bei PufferBild "+Frameaktuell+"->")
   DebugLog("LoadImage("+QDateiname$+(Left$(Bildnummer1$,(bildnummer1laenge-Bildaktuelllaenge)))+(Right$(Bildaktuellstring$,Bildaktuelllaenge))+suffix$+")")   
EndIf

Dein Code funktioniert mit korrekt benannten Bildern, ich hab's mit 18 Frames getestet.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

mkorth

BeitragMi, Mai 27, 2009 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den Steuervariablen ist mir bekannt... aber ich denke da meisst nicht dran und mache mir somit meisst zuviel Arbeit und manchmal dann auch Kopfschmerzen (suchen, weils viele sein können). Würde auch Speicher sparen. Beherzige ich in den nächsten Projekten (Ahja! ist auch ganz wirr voller Steuervars)

Mit dem Debuggen... Muss ich mich dran gewöhnen (bisher noch nicht benutzt).


Naja... Sollte auch funktionieren.. und 3D Max hat mir auch keine falschen Einzelbilder geliefert. Ich hab alle 51 (die ich im moment Brauche) gecheckt. Auch wenn ich mit bild 30 anfange und dann mit 50 aufhoehre hab ich den Fehler ab Bild 14 in der Sequenz.

genutzte Bilder sind 320,240 bei 32Bit, wie ich gerade gesehen habe, im png Format (wobei BB das doch wie BMP nach dem einladen händelt, somit das format egal ist, oder?).

Ich teste das nun mal mit 160,120 bei 32Bit, wenns dann synchron zur Datenmenge wieder aussetzt muss es was mit der genutzten Speichergröße des erstelltenimages zu tun haben...

Wie groß waren denn Deine Bilder? und welche Bit Tiefe hatten sie?

So und nun mal ein dickes Danke an Dich. Ich sitze da schon Stunden vor dem Problem. Auch wenn ich es noch nicht behoben habe (falls es doch eins sein sollte das an BB oder dem prog liegt), so bin ich ein Schritt weiter zur Lösung und habe auch was gelernt (Steuervars, debug).

Vielen Dank noch mal,
mkorth

[EDIT]
So... 160x120 bei 8 bit... er zeichnet bis 17 oder 18 korrekt, danach ein halbes (halbe breite), danach das endbild (eigentlich Bild51) und dann kommt wieder das rumgewusel....... Sad

Xeres

Moderator

BeitragMi, Mai 27, 2009 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Debugfunktionen sind so ziemlich die einzige Möglichkeit tiefgreifende Probleme zu beheben.
Benutz doch z.B. mal stop und schau dir dann alle Variablen an, ob sich irgendwo ein Fehler eingeschlichen hat.
Code: [AUSKLAPPEN]
If Frameaktuell = 14 Then Stop


Ich hab die Samples vom Alphastripper verwendet. Alle 1x dupliziert = 18Bilder á 320x240, png 32bit Farbtiefe. Welche Grafikkarte / Treiberversion läuft bei dir?

Code: [AUSKLAPPEN]
Text 320,100,"Datei "+ZDateiname$+suffix$+" wurde erstellt",1,1
Erstellen kannst du mit bb nur bitmap, also ist suffix da missverständlich, aber das nur am Rande.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

mkorth

BeitragMi, Mai 27, 2009 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Imo, da meine Alte vor 3 Monaten keine Lust mehr hatte was anderes ausser schwarz anzuzeigen, eine alte GF 6200 PCI (ohne e)xpress) mit 256MB Ram (kein shared). Peinlich das so ne Frage kommen musste *g Aber Ersatz ist schon bestellt...

Der Treiber ist Nvidia 6.14.11.8122 von 01.2009 - Viel zu Neu für die Karte.. Aber solange das jetzt nicht daran liegen sollte, ist es mir egal, da die Karte wieder als Ersatzkarte aufn Dachboden landet die Tage.

jo mit Stop währe ne Idee, hab ich auch schon öfter gemacht.. Nur wenn man Stunden davor sitzt und nix mehr weitergeht vergisst man viel und bringt im Endeffekt nur Misst zustande anstatt produktiv zu sein Sad

Das mit bmp weiss ich, bzw. dachte ich es mir.. Hatte ich im Eifer des gefechtes geschrieben und ist schon bei mir ausgetauscht ".bmp" anstatt suffix$


Wie auch immer.... bei 80 x 60 24bit vorlagen zieht er sich alle 51 rein und verarbeitet diese ohne fehler.
So langsam wirds immer komischer...... Demnach muss das Programm doch ok sein -.-
Also liegts an meinem System!?! grml


hab nu 400x300 genommen bei 8bit... einwandfrei.... laut grafikmem kein problem.. ich raffs nicht... werde gleich mal nen älteren treiber suchen und dann noch mal kurz testen.

Xaymar

ehemals "Cgamer"

BeitragMi, Mai 27, 2009 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab ähnliche probleme...
meine treiber sind alle up-to-date, geforce 9800 GTX(PCI-E), ist nur bei bildern mit 10+ frames so
Warbseite
 

mkorth

BeitragMi, Mai 27, 2009 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
es kommt auf das format an..... warum, weshalb... keine ahnung..... hab ein stripe 400x300 8bit bei 51 bildern basteln lassen... 17MB+ beim Ergebniss in .bmp ...einwandfrei...

160,120 bei 8bit geht allerdings dann wieder nix -.-....

Irgendwo steckt da ne Logik die nur Mr.Spock zu erkennen scheint. Nur lebt der ja noch nicht.... ,-)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group