私はGraphics.drawImageを()のクリップの画像RotateTransformを使用して()
private void Form1_Paint(object sender, PaintEventArgs e)
{
Bitmap border = new Bitmap("border2.bmp");
int borderThick = border.Height;
Graphics g = e.Graphics;
Size region = g.VisibleClipBounds.Size.ToSize();
Rectangle desRectW = new Rectangle(0, 0, region.Width - borderThick, borderThick);
// 1. LEFT - RIGHT border
g.TranslateTransform(30, 30);
g.DrawImage(border, desRectW, desRectW, GraphicsUnit.Pixel);
// 2. UP - BUTTOM border
g.ResetTransform();
g.TranslateTransform(50, 50);
g.RotateTransform(90);
g.DrawImage(border, desRectW, desRectW, GraphicsUnit.Pixel);
// 3. RIGHT-LEFT border
g.ResetTransform();
g.TranslateTransform(100, 100);
g.RotateTransform(180);
g.DrawImage(border, desRectW, desRectW, GraphicsUnit.Pixel);
// 4. BOTTOM - UP border
g.ResetTransform();
g.TranslateTransform(150, 150);
g.RotateTransform(270);
g.DrawImage(border, desRectW, desRectW, GraphicsUnit.Pixel);
}
私border2.bmp
4で方向を描画するコードを以下している私の元の画像は、次のとおりです。
しかし結果私が期待していたものとまったく同じではありません。 90度は最初の赤線がなくなり、270度は最初の黒線がなくなり、180度は両方とも欠けている。
は画像のように、私は添付:
PSを:http://i.imgur.com/pzonx3i.png
編集:あなたはborder2.bmp
で取得することができ を私は@Peter Dunihoコメントとしてg.PixelOffsetMode = PixelOffsetMode.HighQuality;
を試してみましたが、私はそれがまたいました正しく描く。 例:4行は、期待どおりの位置で開始していません。
g.TranslateTransform(50, 50);
// LEFT - RIGHT border
g.DrawLine(Pens.Red, 0, 0, 100, 0);
// UP - BOTTOM border
g.RotateTransform(90);
g.DrawLine(new Pen(Color.FromArgb(128, Color.Blue)), 0, 0, 100, 0);
// RIGHT-LEFT border
g.RotateTransform(90);
g.DrawLine(new Pen(Color.FromArgb(128, Color.Green)), 0, 0, 100, 0);
// BOTTOM - UP border
g.RotateTransform(90);
g.DrawLine(new Pen(Color.FromArgb(128, Color.Gray)), 0, 0, 100, 0);
System.Drawingは、浮動小数点数を内部的に使用するため、浮動小数点値が整数ピクセルに丸められたときにオフバイアエラーが発生します。 Graphics.PixelOffsetModeのデフォルト値は不運な選択でしたが、これらの丸めのアーティファクトを取り除くには、これを変更する必要があります。 –
@HansPassant:RotateTransformの実行後に開始座標が変更されます。私は例を追加しました。 – KevinBui
あなたのスクリーンショットを見ると、これはあなたの問題ではありませんが、依然として重要な一歩がありません。あなたのイメージがあなたのモニターと同じ__解像度__を持つことを確認してください。それは96dpiを持っています。私のモニターは120dpiを持っていて、イメージは回転の有無にかかわらずshiteのように見えます。イメージをロードした後にこれを挿入します: '(graphics gr = this.CreateGraphics())img.SetResolution(gr.DpiX、gr。 DpiY); '! – TaW