2

次のコードを実行すると:

    private void button1_Click(object sender, EventArgs e)
    {
        Bitmap b = new Bitmap(300, 400);
        using (Graphics g = Graphics.FromImage(b))
        {
            g.FillRectangle(Brushes.Black, new Rectangle(0, 0, 300, 400));
        }

        b.RotateFlip(RotateFlipType.Rotate90FlipNone);

        using (Graphics g2 = Graphics.FromImage(b))
        {
            g2.DrawRectangle(new Pen(Color.White, 7.2f), 200, 100, 150, 100);
        }

        using (Graphics g3 = this.panel1.CreateGraphics())
        {
            g3.DrawImage(b, 0, 0);
        }
    }

私は以下を取得します:

代替テキスト http://www.freeimagehosting.net/uploads/2c309ec21c.png

ノート:

  • 画像を回転させてから、画像の元の寸法を超える長方形を描画した場合にのみ発生します。

  • 長方形は元の画像の幅に切り捨てられません。長方形の右端だけが描画されません。

  • これは、さまざまなシナリオで発生します。私が最初に気付いたのは、はるかに複雑なアプリでした。問題を簡単に説明するために、このアプリを作成しただけです。

誰かが私が間違っていることを見ることができますか?

4

3 に答える 3

0

あなたの問題は DrawRectangle です。四角形の開始位置は、最初のビットマップの最後に達します。

長方形の位置を変更すると、完全に見えるようになります。

using (Graphics g2 = Graphics.FromImage(b))
{
    g2.DrawRectangle(new Pen(Color.White, 7.2f), 50, 50, 150, 100);
}
于 2009-07-01T18:05:20.237 に答える