Вопрос

у меня возник вопрос по чтению bmp-изображения.Как я могу получить значение пикселя (значения R, G, B) в изображении bmp?Кто-нибудь может помочь мне использовать язык программирования C?

Это было полезно?

Решение

Самый простой способ - найти хорошую библиотеку обработки изображений для выбранной вами платформы и использовать ее.

Трудный способ состоял бы в том, чтобы открыть файл и фактически интерпретировать двоичные данные внутри.Для этого вам понадобится Спецификация файла BMP.Я бы порекомендовал сначала попробовать самый простой способ.

Другие советы

Примечание:возможно, вам потребуется выделить дополнительный байт для альфа-значений, если ваш BMP имеет альфа-канал.В этом случае изображение было бы image[pixelcount][4], и вы бы добавили еще один getc(streamIn) строка для удержания этого четвертого индекса.Оказалось, что моей БМП это не нужно.

 // super-simplified BMP read algorithm to pull out RGB data
 // read image for coloring scheme
 int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
 FILE *streamIn;
 streamIn = fopen("./mybitmap.bmp", "r");
 if (streamIn == (FILE *)0){
   printf("File opening error ocurred. Exiting program.\n");
   exit(0);
 }

 int byte;
 int count = 0;
 for(i=0;i<54;i++) byte = getc(streamIn);  // strip out BMP header

 for(i=0;i<1024;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("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
 }

 fclose(streamIn);

~Locutus

Вам необходимо изучить формат файла BMP.Это облегчает чтение несжатых 24-битных BMP-файлов.Они просто содержат заголовок в начале и значения RGB для каждого пикселя.

Чтобы начать с этого, проверьте пример растрового изображения 2x2 на http://en.wikipedia.org/wiki/BMP_file_format.Выполните следующие действия.

  1. Создайте изображение размером 2x2 BMP, показанное в Википедии.
  2. Откройте файл в двоичном режиме с помощью вашей программы на языке Си.
  3. Найдите позицию байта 54.
  4. Считайте 3 байта.

Байты будут равны 0, 0 и 255 соответственно.(Не уверен, соответствует ли порядок RGB.Я сделал это давным-давно, и я думаю, что порядок не соответствует RGB.Просто убедитесь в этом.)

Вот так просто!Изучите заголовок BMP, чтобы больше узнать о формате.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top