1

Qt6 で HICON を QIcon/QPixmap に変換しようとしています。古い Qt バージョンでは、この変換を非常に簡単にするfromHICON関数が使用されていました。残念ながら、彼らはQt6でそれを削除したので、この回答に従って自分でやろうとしました:

HDC hdc = GetDC(hwnd);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, 32, 32);
hdc = CreateCompatibleDC(hdc);
SelectObject(hdc, hbitmap);

// Calculate size of buffer
BITMAP BitmapInfo = {0};
DWORD BitmapImageSize = BitmapInfo.bmHeight * BitmapInfo.bmWidth * (BitmapInfo.bmBitsPixel / 8);

// Allocate memory
BYTE *pBitmapData = new BYTE[BitmapImageSize];
ZeroMemory(pBitmapData, BitmapImageSize);

// Get Bitmap data
GetBitmapBits(hbitmap, BitmapImageSize, pBitmapData);

QImage image = QImage(pBitmapData, 32, 32, QImage::Format_ARGB32_Premultiplied);

ui->label->setPixmap(QPixmap::fromImage(image));
ui->label->setScaledContents(true);

// delete data
delete[] pBitmapData;

しかし、私は何かを台無しにしたに違いありません。画像は単なるランダム ノイズであり、アプリケーションがクラッシュすることもあります。

表示画像

追加情報: アイコンは次のように取得されます:

HICON icon = (HICON)GetClassLong(hwnd, -14);
4

1 に答える 1