PNG格式的屏幕截图有效,但不是BMP格式
Posted
技术标签:
【中文标题】PNG格式的屏幕截图有效,但不是BMP格式【英文标题】:Screen Capture in PNG Format Works, but not BMP Format 【发布时间】:2015-07-24 05:37:09 【问题描述】:我正在使用下面的代码来捕获正在运行的游戏的屏幕
public static Bitmap CaptureScreen()
DxScreenCapture cap = new DxScreenCapture();
var surface = cap.CaptureScreen();
Bitmap png;
using (DataStream stream = Surface.ToStream(surface, ImageFileFormat.Bmp))
png = new Bitmap(stream);
png.Save(@"C:\Temp\MyFile.bmp");
return png;
保存为ImageFileFormat.Bmp
时,保存的文件全黑。如果我将格式更改为ImageFileFormat.Png
(并将文件扩展名更改为.png),图像保存得很好。
为什么我可以保存为 PNG 格式,但不能保存为 BMP 格式?
【问题讨论】:
【参考方案1】:这段代码应该可以工作(见complete enum):
png.Save(@"C:\Temp\MyFile.bmp", ImageFormat.Bmp)
【讨论】:
奇怪,只是指定 ImageFormat.Bmp 确实会导致它正确保存。我天真地认为它会从 DataStream 中正确解释(就像在 PNG 的情况下一样)。通过这项工作,以下行Bitmap rgn = png.Clone(new Rectangle(911, 170, 32, 14), png.PixelFormat)
将引发 OutOfMemoryException。指定区域显然在png
的范围内。有什么想法吗?以上是关于PNG格式的屏幕截图有效,但不是BMP格式的主要内容,如果未能解决你的问题,请参考以下文章
JavaCV开发详解之26补充篇:视频连续截图并按日期格式生成图片文件名称,支持png,jpg,bmp等格式快速连续截图
JavaCV开发详解之26补充篇:视频连续截图并按日期格式生成图片文件名称,支持png,jpg,bmp等格式快速连续截图