2014-11-30 2 views
1

Я хотел бы использовать картинку для сборки аналоговых часов. Я установил обратный образ для изображения, который будет «часовым лицом». На этом я хотел использовать растровые изображения как свой час, минуты и секунды. Я просмотрел несколько документов forums и MSDN, и моя проблема была почти решена, но я застрял в определенной точке. (Я использую приложение Visual Studio 2013 и C#). Я превратил свой растровый рисунок в объект Graphics, после чего я установил точку поворота с помощью класса TranslateTransform, а затем повернул его с помощью класса RotateTransform. Я нарисовал исходное растровое изображение в объекте Graphics и установил свой файл picturebox.Image для этого растрового изображения. А появляется только определенная точка руки. Когда я устанавливаю другое значение в степень, оно показывает другую определенную часть. Мой код выглядит следующим образом:Каков правильный способ превратить растровое изображение вокруг определенной точки, в определенной степени?

private void rotateImg(Bitmap b , int degree) { 
     Bitmap bitmap = new Bitmap(b.Width,b.Height); 
     Graphics g = Graphics.FromImage(bitmap); 
     g.TranslateTransform(bitmap.Width/2,bitmap.Height/2); 
     g.RotateTransform(degree); 
     g.DrawImage(b, new Point(0,0)); 
     g.Dispose(); 
     pictureBox1.Image=bitmap; 

    } 

И мой результат выглядит следующим образом:

enter image description here

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

+0

http://www.codeproject.com/Tips/643629/Rotate-Bitmap –

+0

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

ответ

1

Оставьте циферблат часов в качестве фона, затем используйте функцию Paint() вашего PictureBox, чтобы поместить руку сверху. Что-то вроде ...

private Bitmap HourHand; 
    private int HourDegree =45; 

    private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics g = e.Graphics; 
     g.TranslateTransform(pictureBox1.Width/2, pictureBox1.Height/2); 
     g.RotateTransform(HourDegree); 
     g.DrawImage(HourHand, new Point(0, 0)); 
    } 
+0

Не могли бы вы рассказать мне, как я могу называть эту функцию каждую секунду? –

+0

Добавьте таймер в свою форму и установите его интервал до 1000. В событии Tick просто вызовите 'pictureBox1.Refresh()'. –

+0

Вы очень помогли, огромное спасибо! –

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