private Point unScale(Point scaledP) { if (picturebox1.SizeMode != PictureBoxSizeMode.Zoom) //only zoom mode need to scale return scaledP; Point unscaled_p = new Point(); // image and container dimensions int w_i = picturebox1.Image.Width; int h_i = picturebox1.Image.Height; int w_c = picturebox1.Width; int h_c = picturebox1.Height; float imageRatio = w_i / (float)h_i; // image W:H ratio float containerRatio = w_c / (float)h_c; // container W:H ratio if (imageRatio >= containerRatio) { // horizontal image float scaleFactor = w_c / (float)w_i; float scaledHeight = h_i * scaleFactor; // calculate gap between top of container and top of image float filler = Math.Abs(h_c - scaledHeight) / 2; unscaled_p.X = (int)(scaledP.X / scaleFactor); unscaled_p.Y = (int)((scaledP.Y - filler) / scaleFactor); } else { // vertical image float scaleFactor = h_c / (float)h_i; float scaledWidth = w_i * scaleFactor; float filler = Math.Abs(w_c - scaledWidth) / 2; unscaled_p.X = (int)((scaledP.X - filler) / scaleFactor); unscaled_p.Y = (int)(scaledP.Y / scaleFactor); } return unscaled_p; }
上色
Code Block
2015年7月25日 星期六
[C#] 取得picture box在zoom模式時的正確圖片座標
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言