我的剪贴板上有截图。
我使用win32clipboard.GetClipboardData(win32con.CF_DIB)
获取字符串,并将字符串写入.bmp文件,但图片查看器无法打开它。
那么,如果没有PIL(以及其他图像的第三部分库),如何将剪贴板中的图像写入本地?
答案 0 :(得分:1)
简单方法的主要问题是写入文件的字符串缺少.bmp
文件头,这是BITMAPFILEHEADER
结构。
为了创建文件头,必须至少解码GetClipboardData()
调用返回的字符串中的一些信息。对于CF_DIB
剪贴板格式,字符串中数据的第一部分将为BITMAPINFOHEADER
。
这种头结构是非常通用的,因为有许多不同风格的DIB具有各种比特的每个组件和压缩种类。幸运的是,用于屏幕截图的屏幕非常简单 - 未压缩的RGBA像素。
这个事实使得事情变得更容易,因为否则确定要放在bfOffBits
的{{1}}字段中的值会因为在大多数其他情况下也变化而变得复杂BITMAPFILEHEADER
之后的大小颜色表和像素阵列的开始。
以下是处理该案例的示例代码(仅限):
BITMAPINFOHEADER