PDA

View Full Version : سوال: چرخاندن تصویر



orkideh07
سه شنبه 01 تیر 1389, 13:46 عصر
سلام...یه برنامه ای نوشتم که اطلاعاتی رو از یه قطب نما میگیره و نمایش عددی میده ..حالا میخوام یه تصویر از یه قطب نما روی فرمم قرار بدم و تغییرات قطب نما را به صورت گرافیکی و با تصویر نشون بدم ...برای این کار نیاز هست که تصویر رو بچرخونم ولی چرخش تصویر خود سی شارپ جواب خوبی نمیده...اینو بگم که شکل گرافیکی که مد نظرم هست دو قسمته یه بخش ثابت که درجه رو نشون میده از صفر تا 360 و یه بخش دیگه که متحرکه و در واقع جهت N رو نشون میده ...ممنون میشم اگه کسی بتونه کمکی بکنه

Saeed.Masoumi
چهارشنبه 02 تیر 1389, 01:49 صبح
سلام
برای اینکار دو تا روش فعلا به ذهنم می رسه:


عقربه رو خودت با DrawLine رسم کنید که نیاز به یک سری محاسبات ریاضی دارید :



صفحه را به 360 قسمت تقسیم کنید فاصله هر نشانه از نشانه بعدی برابر 360/360 یعنی 1 درجه سپس بیاید و 0 (یا همان 360 ) را مبدا در نظر بگیرید و در صورت هرگونه تغییر در مقدار ورودی به ازای ورودی ضرب در 1 درجه مختصات انتهای بردار (همان عقربه) را بدست بیاورید و محل ابتدای بردار نیز همان مرکز دایره صفحه است.



اگر این روش رو انتخاب کردین این قسمت را مطالعه بکنید بد نیست:


لینک (http://barnamenevis.org/forum/showpost.php?p=837511&postcount=4)

2.با استفاده از روش زیر Image خود را (اگر عقربه از جنس Image باشد) بچرخانید:
ذکرچند نکته لازم است:


باید در هنگام چرخش حواستون به Orgin تصویر باشد (یعنی همان نقطه ای که کلیه ترانسفورم ها چه Scale چه Rotate و چه Translate نسبت به آن نقطه محاسبه می شود)
حواستون به اندازه تصویر ورودی باشد امکان دارد درست دوران دهید اما چون تصویر کوچک است شکل عقربه کامل دیده نشود
عکس عقربه را بهتر است با فتوشاپ بسازید و Background آنرا Transparent بگذارید و آنرا با فرمت PNG ثبت کنید.سپس وقتی این تصویر را داخل PictureBox قرار می دهید خود به خود PitureBox خاصیت Transparent می گیرد حال فرمول



private double DegreeToRadian(double AngleInDegree)
{
return AngleInDegree*(Math.PI/180);
}




private Bitmap rotateImage(Bitmap b, double AngleInDegree)
{
//change input angle to radian
float angle=(float)DegreeToRadian(AngleInDegree);
//create a new empty bitmap to hold rotated image
Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(returnBitmap);
//move rotation point to center of image
g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
//rotate
g.RotateTransform(angle);
//move image back
g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
//draw passed in image onto graphics object
g.DrawImage(b, new Point(0, 0));
return returnBitmap;
}