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"); }
|
|