Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » YIP revisited...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
21.08.2006, 17:35 Uhr
Yadgar



High!

Ihr erinnert euch vielleicht an das Kommandozeilen-Grafikprogramm ("Yadgar's Image Processor"), an dem ich Ende Juli/Anfang August am Herumpröbeln war... inzwischen glaube ich die Ursache des Fehlers gefunden zu haben, weiß allerdings immer noch nicht, wie ich ihn beheben kann.

Beim Einlesen eines 1409 x 1403 Pixel großen TGAs, das vorher aus dem Format PNG konvertiert worden war, bricht ifstream.get(ch) regelmäßig nach 1197076 Pixeln ab. Als ich mir das TGA mal genauer ansah, stellte ich fest, dass genau beim 1197077. Pixel zum ersten Mal ein Farbwert größer als 127 vorkam.

Offensichtlich logisch - ifstream.get liest signed chars ein und kann mit Werten über 127 nichts anfangen. Gibt es eventuell noch eine andere ifstream-Methode, mit der ich auch unsigned chars einlesen kann? Im "Aupperle" steht über File-Handling rein gar nichts...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.08.2006, 17:46 Uhr
~Blubber2063
Gast


Nö das ist nicht logisch, das liest 1 byte ein, so gross ist ja ein char, ob er signed oder unsigned ist spielt dabei keine Rolle, das ist nur beim rechnen und bei der Ausgabe wichtig.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.08.2006, 17:49 Uhr
Yadgar



High!


Zitat von ~Blubber2063:
Nö das ist nicht logisch, das liest 1 byte ein, so gross ist ja ein char, ob er signed oder unsigned ist spielt dabei keine Rolle, das ist nur beim rechnen und bei der Ausgabe wichtig.


Trotzdem passiert es mir so... wenn du magst, kann ich Dir das Programm und das Grafikfile mailen!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.08.2006, 17:59 Uhr
~Blubber2063
Gast


Naja dafür müsste ich mir wohl mal das Dateiformat von TGA Dateien anschauen, hab ich eigentlich grad keine Lust, aber du solltest mal schaun ob deine abbruch Bedingung stimmt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.08.2006, 18:03 Uhr
Yadgar



High!


Zitat von ~Blubber2063:
Naja dafür müsste ich mir wohl mal das Dateiformat von TGA Dateien anschauen, hab ich eigentlich grad keine Lust, aber du solltest mal schaun ob deine abbruch Bedingung stimmt.


Anders gefragt: gibt es eine Möglichkeit, die Farbwerte aus der Datei als 1-Byte-Binärwerte einzuladen?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.08.2006, 18:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, also

weiß nicht wie du prüfst ob get schiefläuft oder so. jedenfalls wird wenn ein Wert Größer 127 gefunden wird der wert bei signed char eben negativ, wenn du prüfst ob get einen positiven wert zurückliefert, dann geht das so natürlich schief. prüf lieber mit den jeweiligen funktionen auf eof bzw err. ansonsten einfach nach unsigned casten bzw direkt unsigned benutzen zum einlesen. dann zeigt auch der debugger den richtigen wert
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.08.2006, 18:23 Uhr
Yadgar



High!


Zitat von FloSoft:
hi, also

weiß nicht wie du prüfst ob get schiefläuft oder so. jedenfalls wird wenn ein Wert Größer 127 gefunden wird der wert bei signed char eben negativ, wenn du prüfst ob get einen positiven wert zurückliefert, dann geht das so natürlich schief. prüf lieber mit den jeweiligen funktionen auf eof bzw err. ansonsten einfach nach unsigned casten bzw direkt unsigned benutzen zum einlesen. dann zeigt auch der debugger den richtigen wert


Explizit prüfe ich überhaupt nicht, es gibt auch keine Fehlermeldung, aber ich lasse einen Zähler mitlaufen, der alle drei eingelesene Bytes (=Blue, Green, Red) inkrementiert und nach Abschluss des Einlesens angezeigt wird. Und da bekomme ich halt immer den Wert 1197076 (statt 1409 x 1403 = 1976827)! Anscheinend interpretiert der Compiler den ersten eingelesenen Wert über 127 als EOF...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.08.2006, 18:47 Uhr
~Blubber2063
Gast


Er meint, das du vermutlich nicht solange arbeitest bis der Stream leer ist, also nicht mit der Stream eof methode auf abbruch testest.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2006, 19:43 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja FF ist -1, wenn in deinem bild FF (255) kommst und du nur den rückgabewert prüfst, dann meint er das ist -1 und dadurch EOF
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
22.08.2006, 00:53 Uhr
Yadgar



High!


Zitat von FloSoft:
naja FF ist -1, wenn in deinem bild FF (255) kommst und du nur den rückgabewert prüfst, dann meint er das ist -1 und dadurch EOF


Das kann es aber nicht sein, da das fragliche Pixel einen Hex-Farbwert von 5e1a80 (90, 26, 128) hat... es muss an der 128 liegen!

Andererseits gibt es weiter vorne in der Datei ebenfalls Pixel mit Farbwerten über 127, teilweise sogar mit blue=128, die hat mein Programm anstandslos eingelesen... das wird immer rätselhafter!

Ich blick nicht mehr durch!!!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: