Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Ich verstehe es einfach nicht...

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 ] > 4 < [ 5 ]
030
28.08.2006, 15:53 Uhr
ao

(Operator)



Zitat von Windalf:
In FM ist das Wetter auch Scheisse.

Macht nix, hier schüttets inzwischen auch wieder.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
28.08.2006, 16:01 Uhr
kronos
Quotenfisch
(Operator)


Das will ich doch hoffen! Wenn's in TÜ schifft soll's im Rest von .de auch schiffen!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
28.08.2006, 16:13 Uhr
(un)wissender
Niveauwart


Hier regnet es auch. OL in OL.

Oldenburg in Oldenburg, Niedersachsen.

@Yadgar
Programmieren , vor allem in C++ und als Anfänger, ist hart. Da kommen oft Situation wo man nicht mehr weiter weiß. Hat also nicht mit deiner Intelligenz oder flachen Lernkurve zu tun. Die Frage ist nur, wie du damit umgehst.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
28.08.2006, 18:37 Uhr
Yadgar



High!


Zitat von ao:
So, jetzt aber. Der Fehler liegt hier:

C++:
    input.open(name.c_str(), ios_base::in | ios_base::binary);


Du liest das File bisher ohne ios_base::binary, d.h. als Textfile, und da ist nun mal beim ersten EOF-Zeichen Feierabend. So wie oben kommen exakt 1403 x 1409 Pixel.



Bei mir leider nicht... ich bekomme das gleiche absurde Ergebnis
(356215 Pixel eingelesen) wie vorher auch!

Woher soll ich bloß diese Engelsgeduld nehmen, die man anscheinend zum Programmieren braucht?

Vielleicht habe ich mich mit C++ grundsätzlich übernommen und sollte besser in einer einfacheren Sprache programmieren, vielleicht Visual Basic...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
28.08.2006, 18:47 Uhr
ao

(Operator)



Zitat von Yadgar:
Bei mir leider nicht...

Bitte Source zeigen, das ganze Programm, so wie letztens. Ich hab schon nen Verdacht.

Zitat:
Woher soll ich bloß diese Engelsgeduld nehmen

Ächz ... und was ist mit uns?!?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
035
28.08.2006, 19:45 Uhr
Yadgar



High!


Zitat von ao:
[quote Yadgar]Bei mir leider nicht...

Bitte Source zeigen, das ganze Programm, so wie letztens. Ich hab schon nen Verdacht.
[/quote]

Bittesehr... um nicht noch mehr Fehler reinzubasteln, habe ich es erst mal nicht modularisiert!


C++:
// YIP - Yadgar's Image Processor

#include <iostream>
#include <fstream>
using namespace std;

#define TEST
// #undef TEST

bool weiter(void);

class Pixel
{
   friend class Image;
   private:
      unsigned char b;  // da Farbwerte bei normaler 24bit-Grafik nur  
      unsigned char g;  // zwischen 0 und 255 liegen können,
      unsigned char r;  // genügt hier ein 1 Byte langer Typ
      // Private Methoden zur Angabe von Farbwerten, wegen ihrer Kürze inline
      unsigned char blue(void)  { return b; }
      unsigned char green(void) { return g; }
      unsigned char red(void)   { return r; }
      // Private Methoden zum Setzen von Farbwerten, ebenfalls inline
      void setBlue(unsigned char b)  { this->b=b; }
      void setGreen(unsigned char g) { this->g=g; }
      void setRed(unsigned char r)   { this->r=r; }
        
      /* public:
         Pixel (unsigned char, unsigned char, unsigned char); // Konstruktor */

};

/* Pixel::Pixel (unsigned char bl, unsigned char gr, unsigned char rd)
{
   b=bl;
   g=gr;
   r=rd;
} */


class Image
{
      private:
         unsigned short width;
         unsigned short height;
         Pixel* matrix;
      public:
         Image (unsigned short, unsigned short); // Konstruktor
         ~Image(); // Destruktor
         unsigned long cCount (unsigned char, unsigned char, unsigned char);
         // zählt Pixel der angegegebenen Farbe, wichtig: Farbwert-        
         // reihenfolge ist Standard, also r, g, b!
         unsigned long notBlack (void); // zählt nicht-schwarze Pixel (Methode nur provisorisch!)
         unsigned short getWidth() { return width; }
         unsigned short getHeight() { return height; }
         void setPixel(unsigned short, unsigned short, unsigned char, unsigned char, unsigned char);
         void pDisplay(void); // zeigt einzelne Pixel an
};

Image::Image (unsigned short w, unsigned short h)
{
    matrix = new Pixel[h*w];
    width=w;
    height=h;    
}

Image::~Image()
{
   delete[] matrix;
}

unsigned long Image::cCount (unsigned char r, unsigned char g, unsigned char b)
{
    unsigned long n=0;
    unsigned long x;
    unsigned long y;
    for (y=0; y<height; y++)
   {
      for (x=0; x<width; x++)
      {
          if ( (matrix[y*width+x].blue()==b) && (matrix[y*width+x].green()==g) && (matrix[y*width+x].red()==r) ) n++;
          // cout << (int)matrix[y*width+x].red() << ", " << (int)matrix[y*width+x].green() << ", " << (int)matrix[y*width+x].blue() << endl;
      }
   }
   return n;
}

unsigned long Image::notBlack (void)
{
    unsigned long n=0;
    unsigned long x;
    unsigned long y;
    for (y=0; y<height; y++)
   {
      for (x=0; x<width; x++)
      {
          if ( (matrix[y*width+x].blue()) || (matrix[y*width+x].green()) || (matrix[y*width+x].red()) ) n++;
      }
   }
   return n;
}


void Image::pDisplay(void)
{
    unsigned long x;
    unsigned long y;
    unsigned long pn;
    bool flag=weiter();
    if (flag)
    {  
       for (y=0; y<height; y++)
       {
         for (x=0; x<width; x++)
         {
           pn = y*width+x;
           cout << pn << "\t\t\t" << (int)matrix[y*width+x].red() << ", " << (int)matrix[y*width+x].green() << ", " << (int)matrix[y*width+x].blue() << endl;
           if (pn>0 && !(pn%20)) flag=weiter();
           if (!flag) goto ex;
         }
       }
   }
   ex: ;
}

void Image::setPixel(unsigned short x, unsigned short y, unsigned char b, unsigned char g, unsigned char r)
{
   matrix[y*width+x].setBlue(b);
   matrix[y*width+x].setGreen(g);
   matrix[y*width+x].setRed(r);
}
      
bool weiter(void)
{
   char antwort;
   do
   {
     cout << "Ausgabe fortsetzen? ";
     cin >> antwort;
     if (antwort != 'j' && antwort != 'n')
        cout << "Bitte nur j oder n eingeben!" << endl;
   }
   while (antwort != 'j' && antwort != 'n');
   if (antwort == 'j') return true;
   else return false;
}



int main()
{
   string name;
   ifstream input;
   char ch;
   unsigned char r, g, b;
   unsigned char p_bit; // Größe eines Pixels in Bit, ausgelesen in Byte 16 der TGA-Datei
   unsigned char p_byte; // Größe eines Pixels in Byte (p_bit/8)
   long int i=0, n=0, pn=0;
   #ifdef TEST
   long int p=0;         // zählt testhalber die nicht-schwarzen Pixel schon beim Einlesen
   #endif
   unsigned short int xsize, ysize, x=0, y=0, rd, gr, bl;
   bool flag;

/* do
   { */

      cout << "Bitte geben Sie den Namen der zu ladenden Grafikdatei ein: ";
      cin >> name;
      
      input.open(name.c_str(), ios_base::in | ios_base::binary);
      
      while (input.get(ch) && i<18)
      {
         switch(i)
         {
            case 12: xsize=(unsigned char)ch;
                     break;
            case 13: xsize+=(unsigned char)ch*256;
                     break;
            case 14: ysize=(unsigned char)ch;
                     break;
            case 15: ysize+=(unsigned char)ch*256;
                     break;
            case 16: p_bit=(unsigned char)ch;
                     break;
         }
         i++;
      }
      
      p_byte=p_bit/8;
        
      Image picture(xsize, ysize);
      
      cout << "\nDas Bild ist " << picture.getWidth() << " Pixel breit und " << picture.getHeight()
           << " Pixel hoch." << endl;
      
      cout << "i = " << i << endl << endl;
      
      flag=weiter();
      input.close();
      input.open(name.c_str());
      i=0;  
      while (input.get(ch) && p < xsize*ysize )
      {
         if (i >= 18)
         {
            n=i-18;
            pn = xsize*y+x; // Nummer des aktuellen Pixels
            if (n>0 && !(n%p_byte)) x++;
            if (n>0 && !(n%(xsize*p_byte)))
            {
              x=0;
              y++;
            }
            switch(n%p_byte)
            {
               case 0: b=ch;
                       break;
               case 1: g=ch;
                       break;
               case 2: r=ch;
                       picture.setPixel(x, y, b, g, r);
                       #ifdef TEST
                       p++;
                       if (flag && pn<=xsize*ysize && p>=356000)
                       {
                         cout << pn << "\t\t\t<" << (unsigned short)r <<", " << (unsigned short)g << ", " << (unsigned short)b << ">\n";
                         if (pn>0 && !(pn%20))
                           flag=weiter();
                       }
                       #endif
                       break;
               case 3: ; // vorerst leer, wird bei späterer Implementierung einer Klasse für 32bit-Pixel
                         // berücksichtigt!
                        
                       break;        
            }
         }
         // if (!i) cout << "Beginn des Datenteils!" << endl;
         i++;
      }
      #ifdef TEST  
      cout << pn << " Pixel eingelesen!" << endl;
      cout << "Daten im Objekt \"Image\": " << endl;
      picture.pDisplay();
      #endif
    
      /* cout << "\nNach welcher Farbe soll gesucht werden? " << endl;
      cout << "Rotwert: ";
      cin >> rd;
      cout << "Gr" << (char)129 << "nwert: ";
      cin >> gr;
      cout << "Blauwert: ";
      cin >> bl; */

      
      cout << "Die Datei enth" << (char)132 << "lt " << picture.notBlack() << " gesetzte Pixel" << endl;
/*      flag=weiter();
      input.close();
   }
   while(flag); */

      

/*   r=(unsigned char)rd;
   g=(unsigned char)gr;
   b=(unsigned char)bl;
  
   cout << "Die von ihnen gesuchte Farbe kommt im Bild " << picture.cCount(r, g, b) << " mal vor." << endl;*/

  

   system("pause");
}




Zitat:
Ächz ... und was ist mit uns?!?



Vielleicht sind wir als Menschen mit unseren Steinzeitgenen ja allesamt nicht wirklich dazu geschaffen, viele Stunden am Tag regungslos vor Bildschirmen zu sitzen und über Problemen zu brüten, die wir ohne Computer gar nicht hätten... vielleicht wäre es wirklich besser für uns, wenn wir stattdessen mit Jagdspeeren hinter Mammuts herrennen oder zumindest Schafe auf Hindukusch-Almen hüten wurden...

...nur mal so eine Idee zur Meta-Diskussion über Sinn und Unsinn von IT!

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
036
28.08.2006, 20:04 Uhr
~Blubber2063
Gast


Oh mein Gott, du machst noch mal ein open und da wieder ohne binary, guter Rat nimm den Code von ao der ist sehr gut strukturiert und dürfte eher funktionieren als deiner.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
037
28.08.2006, 20:37 Uhr
ao

(Operator)


Dachte ichs mir doch.

C++:
      flag=weiter();
      input.close();
      input.open(name.c_str(), ios_base::in | ios_base::binary); // hier natürlich auch !!!
      i=0;  


ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
038
28.08.2006, 21:04 Uhr
Yadgar



High!


Zitat von ~Blubber2063:
Oh mein Gott, du machst noch mal ein open und da wieder ohne binary, guter Rat nimm den Code von ao der ist sehr gut strukturiert und dürfte eher funktionieren als deiner.


Natürlich!!! Ich hatte ganz vergessen, dass ich ja das File ein zweites Mal öffnete... jetzt klappt es auch bei mir! Danke an euch alle, insbesondere dich und ao... dir ist doch hoffentlich klar, dass es in meinem zukünftigen virtuellen Afghanistan (= Khyberspace), auf das all meine Programmiererei hinauslaufen soll, euch zu Ehren eine Straße in Kabul namens "Jade-ye Blubber" oder einen Berg "Koh-e Ao" geben wird?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
039
28.08.2006, 22:21 Uhr
kronos
Quotenfisch
(Operator)



Zitat von Yadgar:
Danke an euch alle, insbesondere dich und ao... dir ist doch hoffentlich klar, dass es in meinem zukünftigen virtuellen Afghanistan (= Khyberspace), auf das all meine Programmiererei hinauslaufen soll, euch zu Ehren eine Straße in Kabul namens "Jade-ye Blubber" oder einen Berg "Koh-e Ao" geben wird?

Wie wär's wenn du einfach dein Kraut mit uns teilst, scheint allererste Güteklasse zu sein :-)
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 28.08.2006 um 22:21 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 < [ 5 ]     [ 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: