如何在不使用任何库的情况下使用C ++读取24位BMP文件的数据

问题描述

我正在尝试读取24位BMP文件的数据部分。但是在完成图像处理后的读取之后,我的输出颠倒了。每当我尝试反向发送数据时,都会使图像水平翻转。

这是我用来读取数据的代码

iPacketSize = ((320*240)/128);

fp = fopen(StrFullFilePath,"rb");

unsigned char info[54];

// read the 54-byte header

fread(info,sizeof(unsigned char),54,fp); 

// extract image height and width from header

int width = *(int*)&info[18];

int height = *(int*)&info[22];

// allocate 3 bytes per pixel

int size = (height * ( width * ( 24 / 8 )));

unsigned char* data_pix = new unsigned char[size];

unsigned char* data = new unsigned char[size];

// read the rest of the data at once

fread(data_pix,size,fp); 

fclose(fp);

unsigned char tmp;

//Converting BGR to RGB

for(i = 0; i < size; i += 3)
{
   tmp = data_pix[i];

    data_pix[i] = data_pix[i + 2];

    data_pix[i + 2] = tmp;
} 

//taking avg of RBG val

for(j=0;j<76800;j++)
{
    data[j] = ((data_rev[i] + data_rev[i+1] + data_rev[i+2])/3);

    i=i+3;
}

我想知道我做错了哪个过程;是数据读取还是BGR到RGB转换。 从我所了解的情况来看,我想我将BGR转换为RGB是错误的,并且我认为应该有两个循环来执行相同的操作。 如果有人有示例代码或知道此问题,请帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...