0

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 に変更すると、最初のテストは常に成功し、2 回目のテスト (およびその後のすべてのテスト) でのみ失敗します。同様に、Format24bppRgb に戻すと、最初のテストは失敗し、次のテストは成功します。

理由はありますか?

編集:Luaanのコメントに従って、コードをコピー/貼り付けできるように変更しました。明らかに、必要なすべての参照を自分で追加する必要があります。

4

0 に答える 0