#c, image processing, پردازش تصویر, پردازش تصویر در سی شارپ, سی شارپ

چرخش تصاویر در سی شارپ (Image Rotation)

چرخش تصاویر در سی شارپ

در این قسمت تیم کدگیت را با آموزش چرخش تصاویر در سی شارپ (پردازش تصویر) همراهی کنید. در این جلسه ابتدا فرمول نحوه چرخش یک تصویر را توضیح داده سپس به پیاده سازی آن در سی شارپ می‌پردازیم. پیشنهاد می‌کنیم قبل از بررسی این جلسه، آموزش‌های زیر را مطالعه کنید:

  1. خواندن تصاویر در سی شارپ
  2. ایجاد تصویر در سی شارپ
  3. حلقه For در سی شارپ
  4. تبدیل Affine در سی شارپ

چرخش تصاویر

فرض کنید تصویری داریم که می‌خواهیم آن به انداره Θ درجه بچرخوانیم. برای این کار نیاز به پارامترهای زیر داریم:

  1. Θ : درجه یا مقدار چرخش تصویر
  2. C : نقطه مرکز تصویر که به صورت (Ci,Cj) نمایش می‌دهیم.
  3. X و Y : پیکسل های تصویر ورودی

حال با دانستن پارامترهای خود، فرمول چرخش تصویر به صورت زیر می‌باشد:

newX = (X – Ci)* cos Θ – (Y – Cj)*sin Θ + Ci

newY = (X – Ci)* sin Θ + (Y – Cj)*cos Θ + Cj

برای چرخش تصویر به اندازه Θ کافیه فرمول بالا برای تمامی پیکسل‌ها اعمال کنیم. دقت کنید که فرمول فوق برای مکان هر پیکسل است و مقادیر RGB تغییر نمی‌کنه تنها مکان پیکسل جابجا می‌شود.

چرخش تصاویر در سی شارپ

برای چرخش تصاویر در سی شارپ باید تمامی پیکسل‌های تصاویر را خوانده و با توجه به فرمول بالا مکان جدید پیکسل‌ها را پیدا کرده و در تصویر خروجی بریزیم. کد چرخش تصاویر به صورت زیر است:

public static void Main (string[] args)
		{
			Bitmap myimage = new Bitmap ("Rotation input.png");   
			int width = myimage.Width;
			int height = myimage.Height;
			Bitmap output = new Bitmap (width, height);
			int degree = 90;
			double angle = ToRadians(degree);
			double sin = Math.Sin(angle);
			double cos = Math.Cos(angle);
			double Ci = 0.5 * (width - 1); // point to rotate about
			double Cj = 0.5 * (height - 1); // center of image
			for (int x = 1; x < width-1; x++)
			{
				for (int y = 1; y < height-1; y++)
				{                    
					double a = x - Ci;
					double b = y - Cj;
					int newX = (int) (+a * cos - b * sin + Ci);
					int newY = (int) (+a * sin + b * cos + Cj);
					if (newX >= 00 && newX < width && newY >= 00 && newY < height) {
						output.SetPixel(x, y, Color.FromArgb(myimage.GetPixel(newX,newY).R
							, myimage.GetPixel(newX,newY).G , myimage.GetPixel(newX,newY).B));
					}
				}
			}
			output.Save("RotationOutput.jpg");
			Console.WriteLine ("Press any key to Finish Program....");
			Console.ReadKey ();
		}
		public static double ToRadians(double val)
		{
			return (Math.PI / 180) * val;
		}

در کد فوق متغیر degree زاویه چرخش تصویر است که آن را 90 قرار دادیم. با تعیین پارامتر چرخش تصویر (که در قسمت قبل توضح دادیم) در متغیرهای newX و newY مکان جدید پیکسل را پیدا کرده و آن را درون تصویر خروجی ریختیم. خروجی کد فوق به صورت زیر می‌باشد:

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *