У меня возник вопрос по чтению BMP-изображения. Как я могу получить значение пикселя (значения R, G, B) в изображении bmp? Может ли кто-нибудь помочь мне с использованием языка программирования C?Получение значения пикселя BMP-файла
ответ
Простым способом было бы найти хорошую библиотеку обработки изображений для выбранной вами платформы и использовать ее.
- LinuxImLib/GDK-Pixbuf (Gnome/GTK)/QT Image (KDE/Qt) должны быть в состоянии делать то, что вам нужно.
- Windows Я не знаком с соответствующей системной библиотекой, но MSDN Search for "Bitmap", вероятно, является хорошим местом для начала.
- Mac OSX У какао есть некоторые возможности для обработки изображений, см. this article.
Трудным способом было бы открыть файл и фактически интерпретировать двоичные данные внутри. Для этого вам понадобится BMP File Specification. Я бы посоветовал сначала попробовать простой способ.
Вам необходимо изучить формат файла BMP. Легче читать несжатые 24-битные файлы BMP. Они просто содержат заголовок в начале и значения RGB для каждого пикселя.
Для начала ознакомьтесь с примером изображения растрового изображения 2x2 на http://en.wikipedia.org/wiki/BMP_file_format. Выполните следующие шаги.
- Создайте изображение 2x2 BMP, указанное в Википедии.
- Открыть файл в двоичном режиме, используя вашу программу на C.
- Искать в байте позиции 54.
- Прочитано 3 байт.
Байт будет 0, 0 и 255 соответственно. (Не уверен, что заказ RGB. Я сделал это долго назад, и я думаю, что заказ не RGB. Просто подтвердите это.)
Как просто! Изучите заголовок BMP, чтобы больше узнать о формате.
Примечание: вам может понадобиться получить дополнительный байт для альфа-значений, если ваш BMP имеет альфа-канал. В этом случае изображение будет image[pixelcount][4]
, и вы добавите еще одну строку getc(streamIn)
, чтобы сохранить этот четвертый индекс. Мой BMP оказался не нужен.
// 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
- 1. Получение значения пикселя в изображении
- 2. Получение значения пикселя в OpenCV
- 3. Получение местоположения пикселя с учетом его значения
- 4. Получение значения пикселя маржи в ie7
- 5. Получение значения альфа-пикселя для UIImage
- 6. Получение значения альфа-пикселя для UIImage (MonoTouch)
- 7. Экстраполирование значения пикселя позиции пикселя
- 8. Получение цвета пикселя неточно
- 9. Получение пикселя на UIImage
- 10. Renderscript - получение соседнего пикселя
- 11. Получение цвета пикселя с экрана
- 12. Imagesetpixel - изменение значения пикселя
- 13. Изменение альфа-значения пикселя
- 14. Вычисление зеркального значения пикселя?
- 15. Добавить значения пикселя javascript?
- 16. получение значения Y [Ycbcr] одного пикселя в opencv
- 17. python dicom - получение значения пикселя из файла dicom
- 18. BufferedImage - получение значения пикселя в черно-белом цветовом изображении модели
- 19. Получение частоты от значения пикселя для Web Audio API EQ
- 20. Получение значения цвета любого пикселя в данной растровой картинке
- 21. Получение х и у значения заполненной позиции пикселя в полотне
- 22. Получение цвета пикселя с холста
- 23. Получение смещения пикселя видового экрана
- 24. c получение ширины пикселя (tiff)?
- 25. Получение точного пикселя от текстуры
- 26. Получение формата пикселя из CGImage
- 27. MATLAB получить значения пикселя xyrgb
- 28. OpenCV принимает значения цвета пикселя
- 29. Получение RGB пикселя в touchhesMoved delegate
- 30. Получение RGB-значений определенного пикселя из HBITMAP
нет заголовочного блока вам необходимо пройти, прежде чем попасть в данные изображения? –
@Anon Что делать, если мой файл jpeg? – Kraken