写入BMP文件后,图像被倒转。

写入BMP文件后,图像被倒转。

社区首页 >问答首页 >写入BMP文件后,图像被倒转。问写入BMP文件后,图像被倒转。ENStack Overflow用户提问于 2014-10-01 15:30:03回答 2查看 4.7K关注 0票数 5我使用以下代码:

代码语言:javascript复制f = fopen( _stringhelper.STR("%s.bmp", filename), "wb" );

if( !f ) {

_core.Error( ERC_ASSET, "ncImageLoader::CreateImage - Couldn't create %s image.\n", filename );

return false;

}

int w = width;

int h = height;

int i;

int filesize = 54 + 3 * w * h;

byte bmpfileheader[14] = {

'B', 'M',

0, 0, 0, 0,

0, 0,

0, 0,

54, 0, 0, 0 };

byte bmpinfoheader[40] = { 40, 0, 0, 0,

0, 0, 0, 0,

0, 0, 0, 0,

1, 0,

24, 0};

byte bmppad[3] = { 0, 0, 0 };

bmpfileheader[2] = (byte)( filesize );

bmpfileheader[3] = (byte)( filesize >> 8 );

bmpfileheader[4] = (byte)( filesize >> 16 );

bmpfileheader[5] = (byte)( filesize >> 24 );

bmpinfoheader[4] = (byte)( w );

bmpinfoheader[5] = (byte)( w >> 8);

bmpinfoheader[6] = (byte)( w >> 16 );

bmpinfoheader[7] = (byte)( w >> 24);

bmpinfoheader[8] = (byte)( h );

bmpinfoheader[9] = (byte)( h >> 8 );

bmpinfoheader[10] = (byte)( h >> 16 );

bmpinfoheader[11] = (byte)( h >> 24 );

fwrite( bmpfileheader, 1, 14, f );

fwrite( bmpinfoheader, 1, 40, f );

for( i = 0; i < h; i++ ) {

fwrite( data + ( w * (h - i - 1) * 3 ), 3, w, f );

fwrite( bmppad, 1, ( 4 - ( w * 3 ) % 4 ) % 4, f );

}

fclose(f);我使用glReadPixels()来捕获显示数据。如果我去保存这个文件并打开它的文件夹--它很好,调色板是好的,但是它是倒转的。我试过写for循环“向后”,但仍然没有..。我还是不明白。

可能出了什么问题?

c++xcodeimageopenglbmp关注问题分享EN回答 2推荐最新Stack Overflow用户回答已采纳发布于 2014-10-22 18:20:47

位图是“倒置”存储的,请参阅这里的更多信息:

为什么bmps是倒置存储的?

可以将高度设置为负值以使其正确显示。(-height)

来自MSDN站点,BITMAPINFOHEADER

如果biHeight为负值,则位图为自顶向下的DIB,原点位于左上角。

收藏分享票数 11ENStack Overflow用户发布于 2022-02-18 07:10:49

BMP文件格式结构

对于未压缩的RGB位图,如果高度为正,则位图是自下而上的DIB(与设备无关的位图),原点位于左下角。如果高度为负,则位图为自顶向下的DIB,原点位于左上角。对于YUV位图,位图始终是自上而下的,不考虑高度的符号.解码器应该提供具有正高度的YUV格式,但是为了向后兼容,他们应该接受具有正或负高度的YUV格式。对于压缩格式,不管图像方向如何,高度必须是正的。来源:https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfoheader?redirectedfrom=MSDN

收藏分享票数 1EN页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/26144955

复制相关文章

相关推荐

九宫格输入法教程 九宫格输入法使用技巧
beat365手机网址

九宫格输入法教程 九宫格输入法使用技巧

📅 09-07 👁️ 5756
你不能不知道的英国10大传统甜点
beat365手机网址

你不能不知道的英国10大传统甜点

📅 09-19 👁️ 6708
天猫超市的货哪里来的,天猫超市的货源供应商怎么查
狗狗什么时候发情?了解发情周期的关键因素与注意事项
RO手游战斗时长究竟如何设定?如何高效规划刷怪时间?
世界上飞行速度最快的10种鸟类排行,第一名能超越高铁
真回归了!《魔兽世界》宣布WLK国服定档6月27日,法力水晶直面会同步开启
中国酒名大全列表,中国十大名酒
beat365手机网址

中国酒名大全列表,中国十大名酒

📅 10-10 👁️ 2978
张角真的会法术吗?为何他会被神化呢?
beat365手机网址

张角真的会法术吗?为何他会被神化呢?

📅 06-30 👁️ 3002