2013-05-21 2 views
0

Я хотел был бы только переместить определенную часть моего окна изображения, однако я мог перемещать только эту определенную часть. В настоящее время я могу перемещать его слева направо, но я хочу только переместить его кончик.Как перемещать определенную часть окна с помощью Visual Studio C#

private float angle = 0.0f; 
    Image image; 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Right) angle += 1; 
     else if (e.KeyCode == Keys.Left) angle -= 1; 

     int a = pictureBox1.Location.X; 
     int b = pictureBox1.Location.Y; 

     if (e.KeyCode == Keys.Right) a += 5; 
     else if (e.KeyCode == Keys.Left) a -= 5; 

     pictureBox2.Location = new Point(a, b); 

     RotateImage(pictureBox1, image, angle); 
    } 

    private void RotateImage(PictureBox pb, Image img, float angle) 
    { 
     //Store our old image so we can delete it 
     Image oldImage = pb.Image; 
     pb.Image = RotateImage(img, angle); 

     if (oldImage != null) 
      oldImage.Dispose(); 
    } 

    public static Bitmap RotateImage(Image image, float angle) 
    { 
     return RotateImageFinal(image, new PointF((float)image.Width/2, (float)image.Height/2), angle); 
    } 

    public static Bitmap RotateImageFinal(Image image, PointF offset, float angle) 
    { 
     //create a new empty bitmap to hold rotated image 
     Bitmap rotatedBmp = new Bitmap(image.Width, image.Height); 
     rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution); 

     //make a graphics object from the empty bitmap 
     Graphics g = Graphics.FromImage(rotatedBmp); 

     //Put the rotation point in the center of the image 
     g.TranslateTransform(offset.X, offset.Y); 

     //rotate the image 
     g.RotateTransform(angle); 

     //move the image back 
     g.TranslateTransform(-offset.X, -offset.Y); 

     //draw passed in image onto graphics object 
     g.DrawImage(image, new PointF(0, 0)); 

     return rotatedBmp; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { //Just to store the address of the 'arrow' image. 
     string path = Directory.GetCurrentDirectory(); 
     image = new Bitmap(path + "/img/arrow.bmp"); 
    } 

Микросотовый объекта, который я хочу, чтобы наклонить, я заинтересован в фиксируя нижнюю часть тем временем только перемещая верхний http://imgur.com/H2ic2g7

+0

Вы имеете в виду растяжку рамы, вращающуюся или опрокидывающую ее? – ose

+0

Например, как и стрелок, я хочу оставить снизу неподвижным, между тем картинка может двигаться только по кончику. Поэтому я думаю, что это будет наклоняться. –

+0

Я не понимаю, чего вы пытаетесь достичь. не могли бы вы представить себе, как результат должен выглядеть так: – WiiMaxx

ответ

0

Я был действительно заинтересован в вашем вопросе, и поэтому я решил потратьте некоторое время, чтобы больше узнать о вращении изображения на C#. Итак, вот результат.

private float angle = 0.0f; 
    Image image; 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Right) angle+=1; 
     else if (e.KeyCode == Keys.Left) angle-=1; 

     int a = ballPB.Location.X; 
     int b = ballPB.Location.Y; 

     if (e.KeyCode == Keys.Right) a += 5; 
     else if (e.KeyCode == Keys.Left) a -= 5; 

     ballPB.Location = new Point(a, b); 

     RotateImage(arrowPB, image, angle); 
    } 

    private void RotateImage(PictureBox pb, Image img, float angle) 
    { 
     //Store our old image so we can delete it 
     Image oldImage = pb.Image; 
     pb.Image = RotateImage(img, angle); 

     if (oldImage != null) 
      oldImage.Dispose(); 
    } 

    public static Bitmap RotateImage(Image image, float angle) 
    { 
     return RotateImageFinal(image, new PointF((float)image.Width/2, (float)image.Height/2), angle); 
    } 

    public static Bitmap RotateImageFinal(Image image, PointF offset, float angle) 
    { 
     //create a new empty bitmap to hold rotated image 
     Bitmap rotatedBmp = new Bitmap(image.Width, image.Height); 
     rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution); 

     //make a graphics object from the empty bitmap 
     Graphics g = Graphics.FromImage(rotatedBmp); 

     //Put the rotation point in the center of the image 
     g.TranslateTransform(offset.X, offset.Y); 

     //rotate the image 
     g.RotateTransform(angle); 

     //move the image back 
     g.TranslateTransform(-offset.X, -offset.Y); 

     //draw passed in image onto graphics object 
     g.DrawImage(image, new PointF(0, 0)); 

     return rotatedBmp; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { //Just to store the address of the 'arrow' image. 
     string path = Directory.GetCurrentDirectory(); 
     image = new Bitmap(path + "\\img\\arrow.png"); 
    } 

кредитов для логики идет к MusicMonkey5555 (http://www.codeproject.com/Articles/58815/C-Image-PictureBox-Rotations). Вы даже можете загрузить исходный код из ссылки в случае, если приведенный выше код не совсем ясен. Удачи!

+0

Я не совсем понимаю эту часть «Изображение», к чему это относится? «Изображение» = моя стрелка? Моя стрелка также представляет собой изображение. 'private void RotateImage (PictureBox pb, Image img, float angle) { { // Храните наше старое изображение, чтобы мы могли его удалить Изображение oldImage = pb.Image; pb.Image = RotateImage (img, angle); если (старыйImage! = Null) старыйImage.Dispose(); } общественности статической Растровые RotateImage (Изображение изображение, плавать угол) { возврата RotateImageFinal (изображение, новый PointF ((поплавок) image.Width/2, (с плавающей точкой) image.Height/2), угол); } ' –

+0

PictureBox может содержать уже повернутое изображение. Хотя здесь «Изображение img» относится к исходному изображению стрелки, указывающей вверх, поскольку нам нужно исходное изображение каждый раз, когда мы хотим рисовать с использованием графики. Ознакомьтесь с моей формой Form_Load, чтобы узнать, как определяется изображение. –

+0

Однако я продолжаю получать эту ошибку из [Ссылка на объект не установлена ​​в экземпляр объекта.] (Http://imgur.com/pyMPzSe), любая идея, что это значит? –

Смежные вопросы