首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

处理bmp灰度图,为什么调色板会自动改变?该如何处理

2012-02-10 
处理bmp灰度图,为什么调色板会自动改变??用C编了个程序,读BMP8位灰度图,中值滤波后写出。噪声去的还可以。但

处理bmp灰度图,为什么调色板会自动改变??
用C编了个程序,读BMP8位灰度图,中值滤波后写出。噪声去的还可以。但是颜色却变成蓝绿色,如果读蓝绿色图再写出,颜色变成黄色,再次运行,变红色,最后终于又变回灰色。

我都没有动文件头和调色板,把1078个字节直接写入新文件的。怎么会这样呢?
而且编了个程序显示调色板信息。定义Palette[256][4],灰度图的调色板是正常的。但是别的图的调色板却在第10行出现问题。如下:

第九行:灰图,有色图都是9   9   9   0
但是第十行,灰图是10   10   10   0,蓝色图却变成13   10   13   10,然后是13   10   0   11,11   11   0   12,12   12   0   13。。。   就这样,颜色就错开了。。。别的图也是一样的道理。
因为灰度图我是用photoshop把彩色图加工得到的,防止是这方面原因,就只将54字节复制进新文件,调色板的数据自己写入。可是依然变蓝色,调色板也会紊乱,只是不是第10行开始,好像更靠前了。。。

而且我写出的图还会整体右偏2,3个像素。应该不是那个4像素偏移的问题,因为我的图是256*256的。所以怀疑也跟调色板错位有关


谁能帮忙解释这个怪异的东西。。。非常感谢阿~~~~~~~~~~~  


[解决办法]
楼主用的是VC吗?如果是请到MSDN上查fopen
http://msdn2.microsoft.com/en-us/library/ms884702.aspx
里面有一句关于文本还是二进制方式话,可能是这个问题的原因

FILE *fopen( const char *filename, const char *mode );
mode: Type of access permitted
b
Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.
If t or b is not given in mode, the default translation mode is defined by the global variable _fmode. If t or b is prefixed to the argument, the function fails and returns NULL.

你打开文件的时候可能被认为以text方式打开了!
我曾经遇到过类似的问题,足足调试了两天!

热点排行