我有一个以下列方式存档的 BMP 格式图片
for (j = 0; j < 240; j++) {
for(i=0;i<320;i++) {
data_temp = LCD_ReadRAM();
image_buf[i*2+1] = (data_temp&0xff00) >> 8;
image_buf[i*2+0] = data_temp & 0x00ff;
}
ret = f_write(&file, image_buf, 640, &bw);
其中LCD_ReadRam函数从LCD屏幕一次读取一个像素
我想知道,我怎么能获取此图像文件的像素位置。
以及如何在[320] [240]矩阵中保存每个像素的值
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
BMP文件阅读器可以满足您的需求。您可以获得任何优秀的BMP文件阅读器并根据您的需要进行调整。例如:this question and answer给出了一个BMP文件阅读器,它采用24位BMP格式。您的格式为16位,因此需要进行一些调整。
这是我尝试这样做的(没有测试,所以你应该用坚硬的编码细节)。
int i;
FILE* f = fopen(filename, "rb");
unsigned char info[54];
fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header
int width = 320, height = 240; // might want to extract that info from BMP header instead
int size_in_file = 2 * width * height;
unsigned char* data_from_file = new unsigned char[size_in_file];
fread(data_from_file, sizeof(unsigned char), size_in_file, f); // read the rest
fclose(f);
unsigned char pixels[240 * 320][3];
for(i = 0; i < width * height; ++i)
{
unsigned char temp0 = data_from_file[i * 2 + 0];
unsigned char temp1 = data_from_file[i * 2 + 1];
unsigned pixel_data = temp1 << 8 | temp0;
// Extract red, green and blue components from the 16 bits
pixels[i][0] = pixel_data >> 11;
pixels[i][1] = (pixel_data >> 5) & 0x3f;
pixels[i][2] = pixel_data & 0x1f;
}
注意:这假定您的LCD_ReadRAM
功能(可能是从LCD内存中读取内容)给出了标准5-6-5格式的像素。
名称5-6-5表示为每个颜色分量(红色,绿色,蓝色)分配的每个16位数字中的位数。还存在其他分配,如5-5-5,但我从未在实践中看到它们。
答案 1 :(得分:0)
如果您正在谈论BMP图像,那么现有BMP format。
在BMP
图像中,所有像素按顺序(从图像中的最后一行开始)顺序写入。大小在BMP标题中定义,因此您必须阅读它。
还有一点是图像中的每一行都有填充,以使其乘以4。
答案 2 :(得分:0)
你可以使用gimp。在gimp中打开图像,使用a plugin使用16位模式导出C代码,并将其放入导出的C代码中的数组中: - )。