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

mkorthBetreff: Fehler bei zig images in einem Imagebuffer...... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
mkorth |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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... |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Timer benutz auch gleich Flip![]() Bilderanzahl ist das selbe wie Frames,also CreateImage ![]() 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
mkorth |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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....... ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Debugfunktionen sind so ziemlich die einzige Möglichkeit tiefgreifende Probleme zu beheben.
Benutz doch z.B. mal stop ![]() 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
mkorth |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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. |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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.... ,-) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group