关于bmp save图象颠倒解决方法

关于bmp save图象颠倒解决方法

(thinkvd开发日志)在开发swf to video,保存bmp图时,刚好图象上下颠倒, 以前用了一个简单算法把图象数据倒过来,在网上查了一下,据说有一个标志位,反复看了BITMAPFILEHEADER, BITMAPINFOHEADER结构,也没有发现是哪个变量。

后来想了想,把高度值变成相反值,结果图象还真的变成正立的了。也就是设置BITMAPINFOHEADER中的info.biHeight取反即可。

void SaveBitmapBuffer(char* lpsFileName)

{

if (m_pFrameBuffer == NULL)

return ;

int size = BMP_BIBIT_COUNT / 8 * m_nWidth * m_nHeight;

int fhsize = sizeof(BITMAPFILEHEADER);

int bisize = sizeof(BITMAPINFOHEADER);

BITMAPFILEHEADER bmfh;

BITMAPINFOHEADER info;

memset ( &bmfh, 0, sizeof ( BITMAPFILEHEADER ) );

memset ( &info, 0, sizeof ( BITMAPINFOHEADER ) );

// First we fill the file header with data

bmfh.bfType = 0x4d42; // 0x4d42 = 'BM'

bmfh.bfReserved1 = 0;

bmfh.bfReserved2 = 0;

bmfh.bfSize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) + size;

bmfh.bfOffBits = 0x36; // (54) size of headers

info.biSize = sizeof ( BITMAPINFOHEADER );

info.biWidth = m_nWidth;

info.biHeight = -m_nHeight;

info.biPlanes = 1;

info.biBitCount = BMP_BIBIT_COUNT;

info.biCompression = BI_RGB;

info.biSizeImage = 0;

info.biXPelsPerMeter = 0x0ec4;

info.biYPelsPerMeter = 0x0ec4;

info.biClrUsed = 0;

info.biClrImportant = 0;

BYTE* pBitmapFlashBuffer = new BYTE[fhsize + bisize + size];

if (pBitmapFlashBuffer)

{

memcpy(pBitmapFlashBuffer, &bmfh, fhsize);

memcpy(pBitmapFlashBuffer + fhsize, &info, bisize);

memcpy(pBitmapFlashBuffer + fhsize + bisize, m_pFrameBuffer, size);

FILE *pFile = fopen(lpsFileName,"wb");

if (pFile)

{

fwrite(pBitmapFlashBuffer,1,fhsize + bisize + size,pFile);

fclose(pFile);

}

delete [] pBitmapFlashBuffer;

}

}

相关推荐

鬼牌2代分级详解,买最适合你的那一款!
比亚迪合肥赛车场
杨颖:嫁黄晓明事业爱情双赢,为何选择离婚,如今热度骤降翻车
八字命理学都有哪些流派,它们各自有何特点
穿山甲鳞片的食用方法
普通人如何提高颜值?做到“这四点”,想不变美都难!
科普文章
365bet足球平台

科普文章

📅 06-30 👁️ 3950
暗黑3 24种套装地下城目标及入口一览
邛海旅游度假区怎么样