0

私は次の機能を持っています:

static private Image CropRotate(Image wholeImage, Rectangle cropArea)
{
    Bitmap cropped = new Bitmap(cropArea.Width, cropArea.Height);

    using(Graphics g = Graphics.FromImage(cropped))
    {
        g.DrawImage(wholeImage, new Rectangle(0, 0, cropArea.Width, cropArea.Height), cropArea, GraphicsUnit.Pixel);
        g.RotateTransform(180f);
    }
    return cropped as Image;
}

画像をトリミングしてから、結果のサブ画像を回転させることになっています。ただし、実際には、トリミングのみを実行します。

なぜRotateTransform()適用されないのですか?

4

2 に答える 2

5

RotateTransform()を の前に置いてみましたDrawImage()か?msdn ページの例は、描画が完了する前に適用される変換を示しています。

于 2010-11-30T20:18:03.550 に答える
4

このRotateTransform呼び出しは現在の変換行列を変更し、その後のすべての操作に影響を与えます。すでに出力されている操作はまったく変換されません。これは、変換行列を変更するどの操作でも同じです ( などScaleTransform)。

変換する操作を実行するに、これらを呼び出すようにしてください。この場合は、 への呼び出しの前DrawImageです。

これを使用して、次のようなことができます

  1. 描画 (回転またはスケーリングなし)
  2. 回転 (変換行列のみを変更)
  3. スケール (変換マトリックスのみを変更)
  4. 描画 (現在は回転およびスケーリングされています)
  5. ClearTransform (変換行列のみを変更)
  6. 描画 (回転またはスケーリングなし)

最初と最後の描画出力は変換されませんが、中央のものは回転とスケールの両方の影響を受けます (この順序で)。

于 2010-11-30T20:23:07.733 に答える