ben çizmek için kod şu var benim border2.bmp
yönü 4'teGraphics.DrawImage() klipleri görüntü
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);
}
Benim asıl resimdir:
Ama sonuç rotasyonlar tam olarak beklediğim gibi değil. 90 derece ilk kırmızı çizgiyi eksik, 270 derece ilk siyah sütunu eksik ve 180 derece de eksik. http://i.imgur.com/pzonx3i.png
Düzenleme:: En border2.bmp
alabilirsiniz:
PS:
gibi görüntü ben ekli ben @Peter Duniho yorum olarak g.PixelOffsetMode = PixelOffsetMode.HighQuality;
çalıştım, ama o da does bulundu t doğru çizin. Örnek: 4 satır beklediğimiz gibi aynı konumda başlamıyor.
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 kayan nokta matrisini dahili olarak kullanır, bu da bir kayan nokta değeri integral bir piksele yuvarlandığında, tek tek hatalardan muzdarip olmasını sağlar. Graphics.PixelOffsetMode varsayılan değeri şanssız bir seçim oldu, bu yuvarlama eserler kurtulmak için değiştirmeniz gerekir. –
@HansPassant: RotateTransform yaptıktan sonra başlangıç koordinatı değiştirildi. Bir örnek ekledim. – KevinBui
Ekran resminize baktığınızda, bu sizin sorununuz değil, ancak hala önemli bir adımı kaçırıyorsunuz: görüntünüzün monitörünüzle aynı __resolution__ olduğundan emin olmak için __need__. 96dpi vardır; Benim monitör 120dpi vardır ve görüntü dönme, döndürme ile veya rotasyon gibi görünüyor için düzeltmeden .. Bu resmi yükledikten sonra takın: 'kullanarak (Grafik gr = this.CreateGraphics()) img.SetResolution (gr.DpiX, gr. DpiY); '! – TaW