Как преобразовать Bitmap в Image?
Вот код:
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);
}
Вот, что тут происходит:
Итак, тут создаётся Bitmap, загружаемый из файла:
Bitmap b(L"file3.png");Тут я изменяю пиксель в координатах (10; 10)
b.SetPixel(10, 10, Color(255, 255, 0));Тут я рисую 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.