Как преобразовать Bitmap в Image?

Рейтинг: 0Ответов: 1Опубликовано: 18.04.2023

Вот код:

VOID OnPaint(HDC hdc)
{
    // for flicker-free
    HDC memdc = CreateCompatibleDC(hdc);
    HBITMAP membm = CreateCompatibleBitmap(hdc, w, h);
    SelectObject(memdc, membm);

    Graphics    g(memdc);

    g.SetSmoothingMode(SmoothingModeAntiAlias);

    Bitmap b(L"file3.png");

    b.SetPixel(10, 10, Color(255, 255, 0));

    CachedBitmap cb(&b, &g);

    g.DrawCachedBitmap(&cb, 0, 0);

    // for flicker-free
    BitBlt(hdc, 0, 0, w, h, memdc, 0, 0, SRCCOPY);
    DeleteObject(membm);
    DeleteDC(memdc);
}

Вот, что тут происходит:

  1. Итак, тут создаётся Bitmap, загружаемый из файла:

    Bitmap b(L"file3.png");
    
  2. Тут я изменяю пиксель в координатах (10; 10)

    b.SetPixel(10, 10, Color(255, 255, 0));
    
  3. Тут я рисую Bitmap с помощью Graphics.

    g.DrawCachedBitmap(&cb, 0, 0);
    

    ...но он умеет рисовать только CachedBitmap, а не обычный Bitmap, поэтому я создаю этот самый CachedBitmap до этого:

    CachedBitmap cb(&b, &g);
    g.DrawCachedBitmap(&cb, 0, 0);
    

И вот в чём проблема: g.DrawCachedBitmap(&cb, 0, 0); не может изменить размер изображения, а я хочу развернуть его на весь экран. Мне нужно преобразовать Bitmap в Image, но нигде я не могу найти способ для этого. Как это сделать?

Ответы

▲ -1

Для преобразования Bitmap в Image от GDI+ можно использовать конструктор класса Image, который принимает указатель на объект Bitmap.

В вашем коде можно заменить строку:

CachedBitmap cb(&b, &g);

на следующую строку:

Image image(&b, TRUE);

Теперь переменная image является экземпляром класса Image и вы можете использовать её в методах Graphics, например:

g.DrawImage(&image, 0, 0, w, h); 

Здесь мы используем метод DrawImage для отображения изображения на всю область рисования с помощью аргументов x, y, width и height.