Mám nekomprimovaný dvoubarevný BMP obrázek (příloha):
šířka: 50px
výška: 20px
bitová hloubka: 24
Nejprve načtu výšku, šířku a spočítám velikost (pokud dobře počítám, mělo by vyjít 1000):
uint width, height, size;
fread(&buffer, 1, 18, fr);
fread(&width, 1, 4, fr);
fread(&height, 1, 4, fr);
fread(&buffer, 1, 28, fr);
size = height*width;
Třída Pixel...class Pixel
{
public:
unsigned char r, g, b;
};
Alokuju místo pro obrázek a načtu pixely (formát BGR)... Na konci každé řádky se nacházejí dva prázdné byty.data = new Pixel[size];
for(unsigned int y=0; y<height; y++){
for(unsigned int x=0; x<width; x++){
fread(&data[(y*height)+x].b, 1, 1, fr);
fread(&data[(y*height)+x].g, 1, 1, fr);
fread(&data[(y*height)+x].r, 1, 1, fr);
}
fread(&buffer, 1, 2, fr);
}
A nakonec se presvedcim, ze se mi vsechno povedlo..
for(uint k=0; k<size; k++){
cout << (k+1) << ": " << (int)data[k].r << " " << (int)data[k].g << " " << (int)data[k].b << "\t" << endl;
}
A tady je právě ten problém - člověk by čekla sled 0 a 255. Tak to funguje, ale pouze do cca. 400stého pixelu..
349: 255 255 255
350: 255 255 255
351: 255 255 255
352: 255 255 255
353: 255 255 255
354: 255 255 255
355: 255 255 255
356: 255 255 255
357: 255 255 255
358: 255 255 255
359: 255 255 255
360: 0 0 0
361: 255 255 255
362: 255 255 255
363: 255 255 255
364: 255 255 255
365: 255 255 255
366: 255 255 255
367: 255 255 255
368: 255 255 255
369: 255 255 255
370: 255 255 255
371: 255 255 255
372: 255 255 255
373: 255 255 255
374: 255 255 255
375: 255 255 255
376: 255 255 255
377: 255 255 255
378: 255 255 255
379: 255 255 255
380: 0 0 0
381: 0 0 0
382: 0 0 0
383: 0 0 0
384: 0 0 0
385: 0 0 0
386: 0 0 0
387: 0 0 0
388: 0 0 0
389: 0 0 0
390: 0 0 0
391: 0 0 0
392: 0 0 0
393: 0 0 0
394: 0 0 0
395: 0 0 0
396: 0 0 0
397: 0 0 0
398: 0 0 0
399: 0 0 0
400: 0 0 0
Dál už to nemá s bílou nic společného...
429: 0 0 0
430: 0 0 0
431: 101 101 101
432: 238 238 238
433: 255 255 255
434: 16 16 16
435: 117 117 117
436: 186 186 186
437: 0 0 0
438: 0 0 0
439: 0 0 0
440: 0 0 0
441: 0 0 0
442: 0 0 0
443: 0 0 0
444: 0 0 0
445: 0 0 0
446: 255 255 255
447: 68 68 68
448: 16 16 16
449: 238 238 238
450: 186 186 186
451: 117 117 117
Tak, poradí někdo, kde jsem udělal chybu? :smile11: