我正在尝试从 Windows 中的文件中获取 48x48 或 256x256 图标,但遇到了看似死胡同的情况。目前我在 python 中有一个 HICON 句柄(因为 PySides QFileIconProvider 只返回 32x32 图标),我想在 pyside 窗口中显示它,但是像 QPixmap.fromHICON/HBITMAP 这样的函数没有实现,而且似乎已经从源代码中删除了从 Qt 4.8(?)开始。另外,我试图避免将图标保存到文件中。
那么,有什么方法可以将 HICON 或任何其他您可以将其转换为任何类型的 PySide 对象的东西?
编辑:我一直在尝试简单地重写 python 中的 WinHBITMAP 函数中的旧函数,但效果并不好。我不确定如何将 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