Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bitmap Farbinfomartionen

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
28.06.2007, 23:58 Uhr
~byteworm
Gast


Hallo,
ich bastel seit einigen Wochen an einem Tool das ein Bild nach einer vorgegebenen Farbe absuchen soll und in einem Array alle Pixel auf die dies zutrifft zurückgeben soll.

Ich bin jetzt so weit dass ich das Bild öffne und auch Anfangen kann die Werte auszugeben, allerdings bricht das ganze irgendwann mittendrinn einfach ab "

fread liefert scheinbar willkürlich an einer Stelle einen Fehler zurück, aber scheinbar für jedes Bild eine gleichbleibende. Bei einem Testbild z.B. immer nach dem 136. Pixel. Das is mir schlicht unerklärlich.... vielleicht kann mir ja jemand einen Denkanstoß geben, die Suche hat mir bisher leider weder im Board noch sonst weiter geholfen.


Code:
#ifndef YABL_H_
#define YABL_H_

#endif /*YABL_H_*/

class Yabl{
        // blubb
        struct YablBMPHeader{
            WORD     bfType;                    //     ASCII-Zeichenkette "BM" (Dezimalwert 19778).
            DWORD     bfSize;                 //     Größe der BMP-Datei in Byte. (unzuverlässig)
            DWORD     bfReserved;             //    0        d
            DWORD     bfOffBits;                //    Offset in Byte der Bilddaten vom Beginn der Datei an
        };

        
        struct     YablBMPInfo{
            DWORD     biSize;                
            LONG     biWidth;            
            LONG     biHeight;            
            WORD     biPlanes;
            WORD     biBitCount;                
            DWORD     biCompression;            
            DWORD     biSizeImage;    
            LONG     biXPelsPerMeter;    
            LONG     biYPelsPerMeter;
            DWORD     biClrUsed;    
            DWORD     biClrImportant;
        };
        
        
    public:
        static int loadBitmap (char* fhandle);
};

int Yabl::loadBitmap (char* fhandle){
    FILE* f=fopen(fhandle, "r");
    unsigned char r,g,b;
    unsigned char rgb[1280][800][2];
    int error =0;    
    long px =0;
//sdf
    YablBMPHeader yBmpHeader;    
    YablBMPInfo yBmpInfo;
    
    if(f)
    {        
        fread(&yBmpHeader,sizeof(struct YablBMPHeader),1,f);
        
        fseek(f,14,SEEK_SET);    
        fread(&yBmpInfo,sizeof(struct YablBMPInfo),1,f);
        
        cout << yBmpHeader.bfOffBits/8 << endl;
        fseek(f,yBmpHeader.bfOffBits,SEEK_SET);
        int i,j;
        for (j=0;j<1;j++) {
          for (i=0;i<600;i++) {
                if (fread(&b,sizeof(unsigned char),1,f) != 1) {
                      fprintf(stderr,"Image read failed bbbb\n");
                       exit(-1);
                }
                if (fread(&g,sizeof(unsigned char),1,f) != 1) {
                    fprintf(stderr,"Image read failed ggg\n");
                       exit(-1);
                }
                if (fread(&r,sizeof(unsigned char),1,f) != 1) {
                    fprintf(stderr,"Image read failed rrr\n");
                       exit(-1);
                }
                cout << "r: " << (int)r << " g: " << (int)g << " b: " << int(b) << endl;
          }
           }
           cout << "last px" << i << "||" << j << endl;
    }else
    
        cout << "error" << endl;
        

    return 0;
}



/// aufruf

#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include "yabl.h"

int main(int argc, char *argv[]){
    Yabl yabl;
    yabl.loadBitmap("c:\\workspace\\yabl\\Snap3.bmp");
    
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.06.2007, 00:38 Uhr
struct



versuch mal

C++:
FILE* f=fopen(fhandle, "rb");


Damit öffnest du die Datei explizit im binary-mode.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
29.06.2007, 10:26 Uhr
~byteworm
Gast


das is unglaublich..... es läuft..... ganz am ende gibts wohl noch n problem aber das könnte n Grenzproblem in den Schleifen sein, gleich mal schauen.....

Is wieder sowas typisch dummes gewesen wo ich nie drauf gekommen wäre "

vielen vielen dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


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: