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格式的主要内容,如果未能解决你的问题,请参考以下文章

使用程序集制作屏幕截图

将特定窗口的屏幕截图保存为窗口中的 bmp

FastStoneCapture截图工具

JavaCV开发详解之26补充篇:视频连续截图并按日期格式生成图片文件名称,支持png,jpg,bmp等格式快速连续截图

JavaCV开发详解之26补充篇:视频连续截图并按日期格式生成图片文件名称,支持png,jpg,bmp等格式快速连续截图

delphi不用getdc如何屏幕截图