Информация об изменениях

Сообщение Скомпоновать HBITMAP из других HBITMAP от 27.02.2024 19:29

Изменено 27.02.2024 19:31 пффф

Скомпоновать HBITMAP из других HBITMAP
Здраствуйте!

Гружу кадры из GIFки при помощи WIC в отдельные HBITMAP — всё нормально, отображаются как надо:

  Скрытый текст


Пытаюсь создать одно изображение изо всех кадров. Создаю большую битмапку, делаю для неё HDC, делаю селект битмапки туда.
Потом в цикле делаю рисование, как на экран

  Скрытый текст
            if (!bRescaleFrames)
            {
                BitBlt( dstDcAuto.get(), targetImagePos.width, targetImagePos.height  // hdc назначения и положение в нём
                      , targetImageSize.width, targetImageSize.height
                      , srcDcAuto.get()
                      , srcImagePos.width, srcImagePos.height
                      , SRCCOPY              // Тупо копируем пиксели
                      ); 
            }
            else
            {
                auto autoStretchBltMode = AutoStretchBltMode(dstDcAuto.get(), HALFTONE);
                //rasterFnRes =
                StretchBlt( dstDcAuto.get(), targetImagePos.width, targetImagePos.height  // hdc назначения и положение в нём
                          , targetImageSize.width, targetImageSize.height
                          , srcDcAuto.get()
                          , srcImagePos.width, srcImagePos.height
                          , srcImageSize.width, srcImageSize.height
                          , SRCCOPY              // Тупо копируем пиксели
                          );
            }


При отрисовке этой ленты это выглядит так:
  Скрытый текст


Если сохранить полученное изображение в BMP-файл, то Paint.NET оно выглядит так:
  Скрытый текст



Что я делаю не так?
Скомпоновать HBITMAP из других HBITMAP
Здраствуйте!

Гружу кадры из GIFки при помощи WIC в отдельные HBITMAP — всё нормально, отображаются как надо:

  Скрытый текст


Пытаюсь создать одно изображение изо всех кадров. Создаю большую битмапку, делаю для неё HDC, делаю селект битмапки туда.
Потом в цикле делаю рисование, как на экран

  Скрытый текст
            if (!bRescaleFrames)
            {
                BitBlt( dstDcAuto.get(), targetImagePos.width, targetImagePos.height  // hdc назначения и положение в нём
                      , targetImageSize.width, targetImageSize.height
                      , srcDcAuto.get()
                      , srcImagePos.width, srcImagePos.height
                      , SRCCOPY              // Тупо копируем пиксели
                      ); 
            }
            else
            {
                auto autoStretchBltMode = AutoStretchBltMode(dstDcAuto.get(), HALFTONE);
                //rasterFnRes =
                StretchBlt( dstDcAuto.get(), targetImagePos.width, targetImagePos.height  // hdc назначения и положение в нём
                          , targetImageSize.width, targetImageSize.height
                          , srcDcAuto.get()
                          , srcImagePos.width, srcImagePos.height
                          , srcImageSize.width, srcImageSize.height
                          , SRCCOPY              // Тупо копируем пиксели
                          );
            }


При отрисовке этой ленты это выглядит так:
  Скрытый текст


Если сохранить полученное изображение в BMP-файл, то Paint.NET оно выглядит так:
  Скрытый текст



Что я делаю не так?

ЗЫ Теоретически, я могу ручками байты сформровать для результирующей картинки, проблема в том, что кадры в гифке могут иметь разный размер, и я в одном из варинтов делаю StretchBlt для масштабирования