如何使用C++; < >我想用C++代码来减轻一个位图,从代码>输入文件> BMP < /代码>。使用Windows Paint将图像保存为256色位图(*.bmp;*.dib)。我尝试将1添加到每个像素的每种颜色中,使用下面的代码使其稍微变亮: #包括 #包括 使用名称空间std; const int CHARS_PER_PIXEL=3; int main(){ ifstream inputStream(“input_file.bmp”,ios::binary);//读取输入 如果(!inputStream.good()) 返回1; char*temp=新字符[sizeof(BITMAPFILEHEADER)]; 读取(temp,sizeof(BITMAPFILEHEADER)); BITMAPFILEHEADER*FileInfo=新的BITMAPFILEHEADER; *FileInfo=*(位图文件头*)(临时文件); temp=新字符[sizeof(BitMapInfo头)]; read(temp,sizeof(BitMapInfo头)); BitMapInfo头*PictureInfo=新的BitMapInfo头; *PictureInfo=*(BitMapInfo头*)(临时); 删除临时文件; int charsNumber=CHARS\u/u像素*PictureInfo->biHeight*PictureInfo->biWidth; unsigned char*arrayOfChars=新的unsigned char[charsNumber]; read((char*)arrayOfChars,charsNumber*sizeof(char)); inputStream.close(); for(int i=0;i255?255:arrayOfChars[i]+1; ofstream outputStream(“output_file.bmp”,ios::binary);//保存输出 如果(!outputStream.good()){ 删除文件信息; 删除图片信息; 删除arrayOfChars; 返回1; } write((char*)FileInfo,sizeof(BITMAPFILEHEADER)); write((char*)PictureInfo,sizeof(BitMapInfo头)); write((char*)arrayOfChars,charsNumber*sizeof(char)); outputStream.close(); 删除文件信息; 删除图片信息; 删除arrayOfChars; 返回0; }

如何使用C++; < >我想用C++代码来减轻一个位图,从代码>输入文件> BMP < /代码>。使用Windows Paint将图像保存为256色位图(*.bmp;*.dib)。我尝试将1添加到每个像素的每种颜色中,使用下面的代码使其稍微变亮: #包括 #包括 使用名称空间std; const int CHARS_PER_PIXEL=3; int main(){ ifstream inputStream(“input_file.bmp”,ios::binary);//读取输入 如果(!inputStream.good()) 返回1; char*temp=新字符[sizeof(BITMAPFILEHEADER)]; 读取(temp,sizeof(BITMAPFILEHEADER)); BITMAPFILEHEADER*FileInfo=新的BITMAPFILEHEADER; *FileInfo=*(位图文件头*)(临时文件); temp=新字符[sizeof(BitMapInfo头)]; read(temp,sizeof(BitMapInfo头)); BitMapInfo头*PictureInfo=新的BitMapInfo头; *PictureInfo=*(BitMapInfo头*)(临时); 删除临时文件; int charsNumber=CHARS\u/u像素*PictureInfo->biHeight*PictureInfo->biWidth; unsigned char*arrayOfChars=新的unsigned char[charsNumber]; read((char*)arrayOfChars,charsNumber*sizeof(char)); inputStream.close(); for(int i=0;i255?255:arrayOfChars[i]+1; ofstream outputStream(“output_file.bmp”,ios::binary);//保存输出 如果(!outputStream.good()){ 删除文件信息; 删除图片信息; 删除arrayOfChars; 返回1; } write((char*)FileInfo,sizeof(BITMAPFILEHEADER)); write((char*)PictureInfo,sizeof(BitMapInfo头)); write((char*)arrayOfChars,charsNumber*sizeof(char)); outputStream.close(); 删除文件信息; 删除图片信息; 删除arrayOfChars; 返回0; },c++,windows,image-processing,bitmap,bmp,C++,Windows,Image Processing,Bitmap,Bmp,代码读取位图文件,使用Windows.h库中提供的结构读取位图标题,为每个像素的每种颜色添加1值,并将所有值保存在输出文件中 该代码生成如下所示的图像: 生成的图像(右边的图像)不会变亮,但会以不同的方式进行修改。我怎样才能改正我的错误 编辑: 调试时,我提取了存储在标题中的值: BITMAPFILEHEADER: 类型:19778 尺寸:361078 bfReserved1:0 bfReserved2:0 bOffBits:1078 BitMapInfo标头: 大小:40 宽度:600

代码读取位图文件,使用
Windows.h
库中提供的结构读取位图标题,为每个像素的每种颜色添加1值,并将所有值保存在输出文件中

该代码生成如下所示的图像:

生成的图像(右边的图像)不会变亮,但会以不同的方式进行修改。我怎样才能改正我的错误

编辑:

调试时,我提取了存储在标题中的值:

BITMAPFILEHEADER:

  • 类型:19778
  • 尺寸:361078
  • bfReserved1:0
  • bfReserved2:0
  • bOffBits:1078
BitMapInfo标头:

  • 大小:40
  • 宽度:600
  • 身高:600
  • 双翼飞机:1
  • 比特数:8
  • 双压缩:0
  • 比西泽年龄:36000
  • biXPelsPerMeter:0
  • 双磁通计:0
  • 二次使用:0
  • 重要信息:0

位图是否包含颜色表?是否使用BI_位字段压缩?检查更多信息。@NemanjaBoric-位图包含链接中显示的图像。以下是我从标头中提取的值:BITMAPFILEHEADER:-bfType:19778-bfSize:361078-bfReserved1:0-bfReserved2:0-bfOffBits:1078-BitMapInfo标头:-biSize:40-biWidth:600-biHeight:600-biPlanes:1-biBitCount:8-biCompression:0-biSizeImage:36000-biXPelsPerMeter:0-BiypelPermeter:0-BICLRUSE:0-BICLR重要提示:0BIBIBitCount:8,看起来像基于调色板的图像。在这种情况下,不应触摸像素字节,而应在颜色表上执行照明。查看更多细节。找到以下内容:颜色表。。。颜色深度强制要求≤ 8位,当像素为每像素16位(16bpp)格式(及更高)时,通常不使用颜色表;这些位图图像文件中通常没有颜色表条目。因此,在您的例子中(使用8bpp),使用了一个颜色表。这可以解释输出中出现的奇怪颜色。通过向所有像素值添加1,您只需在颜色表中移动颜色。然而,并没有要求颜色表中的相邻条目必须表示相似的颜色。在您的示例中,情况似乎并非如此->导致了这种有趣但意外的效果。