簡體   English   中英

我確實放大/縮小了PictureBox中的圖像,但是如何避免圖像失真呢?

[英]I did zoom in/out of image in a pictureBox but how do i avoid from the image to become distorted ?

在form1的頂部,我做了:

double increment = 25;

然后:

void pictureBox1_MouseHover(object sender, EventArgs e)
        {
            pictureBox1.Focus();
        }

        void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
        {
            double factor = 1.0;
            if (e.Delta > 0)
                factor += (increment / 100.0);
            else
                factor -= (increment / 100.0);
            pictureBox1.Image = resizeImage(pictureBox1.Image, new Size((int)(pictureBox1.Image.Width * factor), (int)(pictureBox1.Image.Height * factor)));

        }

        public static Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }

它的工作,但有兩個問題:

  1. 如果將大小增加25%,然后減少25%,則您將無法獲得最初的大小。 例如,100 + 25%= 125,125 -25%= 94(因為100的25%是25,而125的25%是31)。 如何增加/減少它? 以及如何將其限制為最小和最大大小?

  2. 如果我不斷增加和減小尺寸,則照片遲早會變形。 如何避免這種情況?

  • 用加法/除法(1 * 1.25 = 1.25,1.25 / 1.25 = 1)代替加法/減法,例如:

     double increment = 1.25; double factor = 1.0; if (e.Delta > 0) factor *= increment; else factor /= increment; 
  • 問題是您正在基於先前生成的而不是原始圖像生成圖像的新版本。 如果降低某些圖片的分辨率,則會丟失一些信息。 這是一個單向過程。 換句話說,您不能先縮小圖像再增大圖像,並期望結果與原始圖像相同。 我認為您應該始終將原始圖像傳遞給resizeImage方法。 原始圖像可以存儲在字段中,也可以每次從資源或文件中讀取。

  • 在將新圖像分配給pictureBox1.Image之前 ,應處置舊圖像。

您可能需要考慮在鼠標懸停時顯示不同版本的較大圖像,而不是放大相同的圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM