Предельно простой код: Код (Text): case WM_PAINT: { PAINTSTRUCT ps = {0}; HDC dc = BeginPaint(wnd, &ps); HBITMAP bmp = CreateCompatibleBitmap(dc, 308, 114); HDC memdc = CreateCompatibleDC(dc); SelectObject(memdc, bmp); DeleteObject(bmp); BITMAPINFO bi = {0}; bi.bmiHeader.biSize = sizeof(bi.bmiHeader); bi.bmiHeader.biWidth = 308; bi.bmiHeader.biHeight = 114; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biCompression = BI_PNG; bi.bmiHeader.biSizeImage = bitmap.size(); SetDIBitsToDevice(memdc, 0, 0, 308, 114, 0, 0, 0, 114, &*bitmap.begin(), &bi, DIB_RGB_COLORS); BLENDFUNCTION bf = {0}; bf.BlendOp = AC_SRC_OVER; bf.SourceConstantAlpha = 255; bf.AlphaFormat = AC_SRC_ALPHA; AlphaBlend(dc, 0, 0, 308, 114, memdc, 0, 0, 308, 114, bf); DeleteDC(memdc); EndPaint(wnd, &ps); } return 0; Когда использую BI_RGB - все ок, все работает. Когда даю PNG - отрисовка как будто не происходит
Эм... А, ну да Вопрос собственно в том, выводил ли кто PNG таким (или похожим) способом? Саму PNG-ху я создавал тремя способами в фотошопе и одним в mspaint. Результат один и тот же.
Я, конечно, могу сильно ошибаться… BI_PNG умеет выводиться на экран или только на принтер, который это поддерживает?
iZzz32 Ясно, спасибо. Тогда не понятно - как загрузить кантинку с альфой? Вот что в мсдн сказано по поводу 32-х бит BI_RGB: