Windows のファイルから 48x48 または 256x256 のアイコンを取得しようとしていますが、行き止まりのように見えます。現時点では、Python に HICON ハンドルがあります (PySides QFileIconProvider は 32x32 のアイコンのみを返すため)。これを pyside ウィンドウに表示したいのですが、QPixmap.fromHICON/HBITMAP のような関数は実装されておらず、ソースから削除されたようですQt 4.8(?) 以降。また、アイコンをファイルに保存する必要がないようにしています。
それで、どんな種類の PySide オブジェクトに対しても、HICON またはそれを変換できる他のものを取得する方法はありますか?
編集: 古い関数 fromWinHBITMAP 関数を python で単純に書き直そうとしましたが、うまくいきません。src 行を python に変換する方法がわかりません。QImage.scanLine() によって返されるメモリ バッファーの値を変更する方法もわかりません。
for (int y=0; y<h; ++y) {
QRgb *dest = (QRgb *) image.scanLine(y);
const QRgb *src = (const QRgb *) (data + y * bytes_per_line);
for (int x=0; x<w; ++x) {
dest[x] = src[x] | mask;
}
}
現時点では、win32api を使用して HICON から PyCBITMAP を作成し、ビットのリストを取得しています。
for y in range(0, hIcon.height):
dest = i.scanLine(y)
src = bitmapbits[y*hIcon.widthBytes:(y*hIcon.widthBytes)+hIcon.widthBytes]
for x in range(0, hIcon.width):
dest[x] = bytes(ctypes.c_uint32(src[x] | 0))
これにより、「ValueError: memoryview オブジェクトのサイズを変更できません」という結果になります。
関数のソースはこちらにあります: http://www.qtcentre.org/threads/19188-Converting-from-HBitmap-to-a-QPixmap?p=94747#post94747