我需要使用 PixelFormat.Format24bppRgb 保存在位图中的屏幕截图。我写了一个简单的类和测试,如下所示:
public class CaptureScreenInfo
{
public Bitmap TakeScreenShot(int posLeft, int posTop, int posRight, int posBottom)
{
int width = posRight - posLeft;
int height = posBottom - posTop;
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format16bppGrayScale);
using (Graphics gr = Graphics.FromImage(bmp))
{
gr.DrawImage(bmp, new Rectangle(0, 0, width, height));
}
return bmp;
}
}
单元测试:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void RegularScreenShot()
{
CaptureScreenInfo csi = new CaptureScreenInfo();
Bitmap bmp = csi.TakeScreenShot(0, 0, 800, 600);
Assert.AreEqual(System.Drawing.Imaging.PixelFormat.Format24bppRgb, bmp.PixelFormat);
}
}
奇怪的是,如果我将 PixelFormat 更改为其他所需的 Format24bppRgb,第一次测试将始终通过,并且只有在第二次测试(以及之后的每个测试)我才会失败。同样,如果我改回 Format24bppRgb,第一个测试将失败,下一个测试将通过。
知道为什么吗?
编辑:根据 Luaan 的评论,我将代码更改为可复制/粘贴。显然,您需要自己添加所有必要的引用。