Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Absurder Laufzeitfehler!

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 <
000
01.07.2018, 03:14 Uhr
Yadgar



Hi(gh)!

Eine Routine, die unkomprimierte TGA-Bilder (nach vorheriger passender Skalierung mit z. B. GIMP) in C 64-Grafikmodi umrechnet, und zwar wahlweise in Blockgrafik (40 x 25 Pixel) oder in Multicolor-Hires-Grafik (160 x 200 Pixel)... leider verhält sich das Programm völlig unberechenbar: vorgestern Abend bekam ich einwandfreie Ergebnisse, heute - ohne, dass ich irgendetwas am Quellcode geändert hätte! - bei gleichen Eingabedaten eine Laufzeit-Fehlermeldung: "Gleitkomma-Ausnahme"!

Hier sind das Hauptprogramm mit den Funktionen, die Klassendefinition und eine kleine Konfigurationsdatei für den Wechsel zwischen deutscher und englischer Ausgabe:

www.rock-o-data.de/yip.cc
www.rock-o-data.de/yip_classes.h
www.rock-o-data.de/yip.conf

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.07.2018, 04:17 Uhr
Yadgar



Hi(gh)!

Den Laufzeitfehler habe ich mittlerweile korrigieren können und bin auch ein ganzes Stück weiter gekommen in der Programmierung - aber jetzt stehe ich vor einem Problem, wo ich definitiv nicht weiter weiß!

In folgendem Code:


C++:
    for (k=0; k<8; k++)
    {
      for (l=0; l<4; l++)
      {
            match = false;
        m = 0;
        c.red = c64_area[k].at(l).get_red();
        c.green = c64_area[k].at(l).get_green();
        c.blue = c64_area[k].at(l).get_blue();
        while (match == false && m < colnum_area-4)
        {
          cout << c.red << " " << c.green << " " << c.blue << " | " << excesscolors[m].red << " " << excesscolors[m].green << " " << excesscolors[m].blue << endl;
              if ( c.red == excesscolors[m].red && c.green == excesscolors[m].green && c.blue == excesscolors[m].blue)
        match == true;
          m++;
        }
        cout << match << endl;
        if (match == true)
        {  
          rgb closest = fourcolors[0];
          for (n=0; n<4; n++)
          {
          if (coldist(c, fourcolors[n]) < coldist(c, closest))
              closest = fourcolors[n];
          }
          cout << a+k << endl;
          cout << b+l << endl;
          c64img[a+k].at(b+l).set_all(closest.red, closest.green, closest.blue);
        }
      }    
    }      



soll ein Bildbereich von 8 x 4 Pixel auf Pixel durchsucht werden, die keine der vier häufigsten Farben (die Häufigkeit der Farben wurde bereits voher ermittelt, anschließend wurden die Farben nach ihren Häufigkeiten absteigend sortiert). Falls ein solches Pixel (durch Vergleich mit einem Vector-Array vom Typ rgb (eine selbst definierte struct aus den drei Farbwerten), das die "überschüssigen" Farben enthält) gefunden wird, wird die Variable match auf true gesetzt und die Farbe des Pixels durch die im RGB-Farbraum nächstliegende der vier häufigsten Farben ersetzt.

Leider wird die Bedingung, dass die aktuelle Pixelfarbe mit einer der (in diesem Falle drei) "überschüssigen Farben" identisch ist anscheinend nie wahr - obwohl das laut Ausgabe eigentlich der Fall sein müsste (links die Werte des aktuellen Pixels, rechts die drei gesuchten Farben), trotzdem bleibt der "match"-Wert immer bei 0 (false)!

112 116 111 | 0 0 0
112 116 111 | 95 83 254
112 116 111 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111
0
48 230 198 | 0 0 0
48 230 198 | 95 83 254
48 230 198 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111
0
66 69 64 | 0 0 0
66 69 64 | 95 83 254
66 69 64 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111
0
164 167 162 | 0 0 0
164 167 162 | 95 83 254
164 167 162 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111
0
0 0 0 | 0 0 0
0 0 0 | 95 83 254
0 0 0 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111
0
253 254 252 | 0 0 0
253 254 252 | 95 83 254
253 254 252 | 112 116 111

Was mache ich falsch?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


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: