ایجاد یک ویرایشگر با استفاده از Maintaining Aspect Ratio

در این مقاله نحوه ذخیره تصاویر در پایگاه داده را در قالب یک پروژه آموزش خواهیم داد. خواهیم آموخت که چگونه می توانیم با ایجاد یک ویرایشگر تصاویر را به ابعاد دلخواه تغییر سایز دهیم.

ایجاد یک ویرایشگر با استفاده از Maintaining Aspect Ratio

اغلب تصاویر را با دوربین های دیجیتال 8 مگاپیکسلی می گیریم، در نتیجه سایز تصاویر بسیار بزرگ هستند. ما تصاویر را به سایز 1024*786 تغییر میدادیم. اما این مسئله کمی آزاردهنده بود، زیرا برخی تصاویر دارای تصویر پس زمینه بسیار شلوغی و سردرگمی بودند که با تغییر سایز تصویر بسیار نامطلوب می شد. این پروژه نتیجه تلاش ها و زحمات ما است.

ایجاد یک ویرایشگر تصویر کار را بسیار آسان نموده است.

قابل ذکر است که ما مدعی این نیستیم که برای این کار نیاز به نوشتن خط های طولانی کد است. ما یادگرفته ایم و از کدهای مختلف مقالات موجود در CodeProject استفاده کرده ایم. خوشبختانه نتیجه کلی خیلی فراتر از بخش های کوچک است. این مقاله براساس کدهای ImageResizer.aspx  و مقالات مختلف موجود در CodeProject نوشته شده است.

استفاده از کدها:

کدها باید قابلیت تشریح داشته باشند.

راز کار حفظ نمودن تمام ابعاد اصلی تصویر است.

 private static Image CropImage(Image img, Rectangle cropArea)
        {
            try {
                Bitmap bmpImage = new Bitmap(img);
                Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
                return (Image)(bmpCrop);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "CropImage()");
            }
            return null;
        }

        private void saveJpeg(string path, Bitmap img, long quality)
        {
            
            EncoderParameter qualityParam = new EncoderParameter(
                    System.Drawing.Imaging.Encoder.Quality, (long)quality);


            ImageCodecInfo jpegCodec = getEncoderInfo("image/jpeg");

            if (jpegCodec == null)
            {
                MessageBox.Show("Can't find JPEG encoder?", "saveJpeg()");
                return;
            }
            EncoderParameters encoderParams = new EncoderParameters(1);
            encoderParams.Param[0] = qualityParam;

            img.Save(path, jpegCodec, encoderParams);
        }

        private ImageCodecInfo getEncoderInfo(string mimeType)
        {
 
            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();


            for (int i = 0; i < codecs.Length; i++)
                if (codecs[i].MimeType == mimeType)
                    return codecs[i];

            return null;
        }

        private void btnOK_Click(object sender, EventArgs e)
        {

            Bitmap bmp = null;

            Rectangle ScaledCropRect = new Rectangle();
            ScaledCropRect.X         = (int)(CropRect.X / ZoomedRatio);
            ScaledCropRect.Y         = (int)(CropRect.Y / ZoomedRatio);
            ScaledCropRect.Width     = (int)((double)(CropRect.Width) / ZoomedRatio);
            ScaledCropRect.Height    = (int)((double)(CropRect.Height) / ZoomedRatio);

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    bmp = (Bitmap)CropImage(pictureBox1.Image, ScaledCropRect);
                    saveJpeg(saveFileDialog1.FileName, bmp, 85);
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message, "btnOK_Click()");
                }
            }

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

نقاط مورد علاقه:

یک Crop Box وجود دارد که می توانیم با استفاده از موس گوشه های آن را گرفته و تغییرسایز دهیم. Crop Box شامل مقدایری Combo box است. Combo box های دیگر طول Crop box را تنظیم می کند، و ارتفاع نیز بر حسب نسبت ابعاد مشخص می شود.

برخی از ویژگی های پردازش تصویر ساده که در دسترس هستند، شامل چرخیدن، واژگونی رنگ ها، خاکستری کردن، تضاد گذاشتن و روشنایی هستند.

نکته: تمام تصاویر ما، تصاویری از طبیعت هستند، برای همین ما وقت زیادی برای تغییر سایز آن ها در کد انجام نمی دهیم.

در تصویر زیر نمایی از این ویرایشگر را می بینید.

 

فایل های ضمیمه