Итак, у меня есть BMP-файл, и я хочу извлечь детали rgb для каждого пикселя изображения.Получите значение RGB каждого пикселя из файла bmp
Я где-то читал, что следующий будет делать это для меня
int main(){
int image[100][3]; // first number here is 100 pixels in my image, 3 is for RGB values
FILE *streamIn;
int i;
streamIn = fopen("./t.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
return 0;
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<100;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
//printf("[%d,%d,%d] ",image[i][0],image[i][1],image[i][2]);
if(image[i][0]==255 && image[i][1]==255 && image[i][2]==255)
printf("B");
else if(image[i][0]==0 && image[i][1]==0 && image[i][2]==0)
printf("W");
else{
printf("[%d,%d,%d]",image[i][0],image[i][1],image[i][2]);
//return 0;
}
}
fclose(streamIn);
return 0;
}
Теперь, учитывая мой BMP файл будет 10 * 10 пикселей, будет выше метод работы?
Редактировать Я добавил ответ, возможно, это может помочь кому-то. Приветствия.
Вы пробовали? Правильно ли это? –
Эта программа предполагает 24-битные данные пикселя BMP и делает предположение о размере заголовка. Несмотря на то, что это типично, я предлагаю вам изучить, как работает формат [BMP] (http://en.wikipedia.org/wiki/BMP_file_format). Возможно, вы не работаете с точно таким же файловым форматом (даже если это возможно). – Hydronium
@JoachimPileborg хорошо у меня был jpg со мной, и я преобразовал его в bmp с помощью imagemagick, используя 'convert -threshold xx% ' с установленным пороговым значением. Я думал, что все пиксели будут иметь значение 000 или 255 255 255, но некоторые из них имеют разные значения. –
Kraken