У меня есть два растровых изображения:Объединение двух Gdiplus :: Bitmap в один C++
Gdiplus::Bitmap *pbmBitmap, pbmBitmap1;
Они содержит два изображения. Как я могу объединить их в одно изображение?
Я пытался что-то вроде этого:
Bitmap* dstBitmap = new Bitmap(pbmBitmap->GetWidth(), pbmBitmap->GetHeight() + pbmBitmap1->GetHeight()); //create dst bitmap
HDC dcmem = CreateCompatibleDC(NULL);
SelectObject(dcmem, pbmBitmap); //select first bitmap
HDC dcmemDst = CreateCompatibleDC(NULL);
SelectObject(dcmem1, dstBitmap); //select destination bitmap
BitBlt(dcmemDst em1, 0, 0, pbmBitmap->GetWidth(), pbmBitmap->GetHeight(), dcmem, 0, 0, SRCCOPY); //copy first bitmap into destination bitmap
HBITMAP CreatedBitmap = CreateCompatibleBitmap(dcmem, pbmBitmap->GetWidth(), pbmBitmap->GetHeight() + pbmBitmap1->GetHeight());
dstBitmap = new Bitmap(CreatedBitmap, NULL);
dstBitmap ->Save(L"omg.bmp", &pngClsid, 0); //pngClsid i took from msdn
Я знаю - уродливый код, но мне нужно сделать это в C++. Я получаю черное изображение. Зачем?
// EDIT
После двух часов прибегая к помощи и чтение я получил это:
HBITMAP bitmapSource;
pbmBitmap->GetHBITMAP(Color::White, &bitmapSource); //create HBITMAP from Gdiplus::Bitmap
HDC dcDestination = CreateCompatibleDC(NULL); //create device contex for our destination bitmap
HBITMAP HBitmapDestination = CreateCompatibleBitmap(dcDestination, pbmBitmap->GetWidth(), pbmBitmap->GetHeight()); //create HBITMAP with correct size
SelectObject(dcDestination, dcDestination); //select created hbitmap on our destination dc
HDC dcSource = CreateCompatibleDC(NULL); //create device contex for our source bitmap
SelectObject(dcSource, bitmapSource); //select source bitmap on our source dc
BitBlt(dcDestination, 0, 0, pbmBitmap->GetWidth(), pbmBitmap->GetHeight(), dcSource, 0, 0, SRCCOPY); //copy piece of bitmap with correct size
SaveBitmap(dcDestination, HBitmapDestination, "OMG.bmp"); //not working i get 24kb bitmap
//SaveBitmap(dcSource, bitmapSource, "OMG.bmp"); //works like a boss, so it's problem with SaveBitmap function
Он должен работать, но я получаю 24Kb растрового изображения. SaveBitmap - это моя настраиваемая функция, она работает, когда я пытаюсь сохранить исходный битмап. Почему я не могу скопировать одно растровое изображение в другое?
Где вы загрузки исходного растрового изображения? –
Вы имеете в виду pbmBitmap и pbmBitmap1? Я загружаю их в начале. Они загружаются правильно. Я проверил его, используя save. – Yozer
Прошло довольно много времени с тех пор, как я сделал такие вещи, но я бы предложил проверить результат всех операций (что BitBlt и SelectObject возвращают ненулевое значение, а dcMem и dcMemDst не являются NULL) –