gpt4 book ai didi

c++ - 为什么 HBITMAP 是倒置的

转载 作者:行者123 更新时间:2023-11-30 04:37:11 26 4
gpt4 key购买 nike

我正在尝试为给定的 jpg 图像创建一个 avi 文件。我正在使用库读取 jpg 并为其准备 hbitmap。最后我添加它来创建 avi 文件。但我最终的 avi 文件包含倒置图像。我在 bitmapheader 中对 hight 保持负数。我的位图仍然是倒置的。你能帮忙解释一下为什么会出错吗

这里我给出了我实现的代码

void makeVideo()

{

GoldImage Test ;

for(int i=0;i<10;i++)

{

Test.SetImage(m_MyImage[i])

HBITMAP hBitmap;
Test.GetBitMap(0,0,hBitmap);

if(i==0)

{

avi = CreateAvi("test.avi",1000,NULL);
AVICOMPRESSOPTIONS opts; ZeroMemory(&opts,sizeof(opts));

SetAviVideoCompression(avi,hBitmap,&opts,true,NULL);

}

AddAviFrame(avi,hBitmap);

}

CloseAvi();

}


void GoldImage::GetBitMap(HBITMAP &hBitmap)

{

BITMAPINFOHEADER bmi;

bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biWidth = Width
**bmi.biHeight = (-1)*Height;**
bmi.biPlanes = 1;
bmi.biBitCount = 32;
**bmi.biCompression = BI_RGB;**
bmi.biSizeImage = 0;
bmi.biXPelsPerMeter = 0;
bmi.biYPelsPerMeter = 0;
bmi.biClrUsed = 0;
bmi.biClrImportant = 0;



RGBQUAD *prgbaDIB = 0;
hBitmap = CreateDIBSection ( NULL, (BITMAPINFO *)&bmi, DIB_RGB_COLORS, (void**)&prgbaDIB, NULL, 0 );



const unsigned int columns = m_Image.columns();
const unsigned int rows = m_Image.rows();

RGBQUAD *pDestPixel = prgbaDIB;

for( unsigned int row = 0 ; row < rows ; row++ )
{
const PixelPacket *pPixels = m_Image.getConstPixels(0,row,columns,1);

for( unsigned long nPixelCount = columns; nPixelCount ; nPixelCount-- )
{
pDestPixel->rgbRed = ScaleQuantumToChar(pPixels->red);
pDestPixel->rgbGreen = ScaleQuantumToChar(pPixels->green);
pDestPixel->rgbBlue = ScaleQuantumToChar(pPixels->blue);
pDestPixel->rgbReserved = 0;
++pDestPixel;
++pPixels;
}

}

}

提前致谢

最佳答案

位图的扫描线上下颠倒存储。当您直接写入它们的像素时,您必须对此进行补偿。

关于c++ - 为什么 HBITMAP 是倒置的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com