Почему HBITMAP перевернут - PullRequest
       8

Почему HBITMAP перевернут

1 голос
/ 29 октября 2010

Я пытаюсь создать файл avi для данного изображения JPG. Я читаю jpg с использованием библиотеки и готовлю hbitmap для нее. Наконец я добавляю его для создания файла avi. Но мой последний avi-файл содержит перевернутые изображения. Я сохранил негатив в высоту в bitmapheader. Тем не менее мой hbitmap перевернут. Подскажите, пожалуйста, почему ошибка

Здесь я даю код, который я реализовал

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;
              }

          }

}

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 29 октября 2010

Битовые карты хранят свои строки развертки вверх дном. Вам придется компенсировать это, когда вы будете напрямую писать их пиксели.

0 голосов
/ 30 октября 2010

я решил свою проблему.я скопировал в другую hbitmap в обратном порядке.Это правильно или неправильно?

...