如何获取图片在图片框内的显示区域?
How to get the display area of a picture inside a picture box?
我有 2 个问题:
- 如何通过缩放比例获取图片在图片框内的显示区域?
- 示例:
- 我有一张图片 (1000 x 1000),我的任务是 "get an area (600 x 600) of that image"。
- 我创建了一个表单,然后是一个面板,里面有一个图片框,图片框的大小是 400 x 400,写一些代码让用户可以在框内拖动图片
- 我将图像加载到图片框中。由于所需区域是 600 x 600,但我的盒子只有 400 x 400,所以我用 0.67 系数缩放图像。
- 用户将select拖动图像到所需区域。
- 我怎样才能得到那个区域(从原始图像)?
- 如果我允许用户在该图片框中缩放in/out,我该如何处理?
因为图片是按picbox
缩放的,不能直接从picbox中取区域。诀窍是 un-scale
用户 select 的矩形并将其转换为原始矩形。
您需要两张图片:
Bitmap original600x600; //unscaled
Bitmap picBoxImage; //with 400x400 dimensions
当您的表单加载时:
original600x600 = new Bitmap(600, 600);
//Draw the portion of your 1000x1000 to your 600x600 image
....
....
//create the image of your pictureBox
picBoxImage= new Bitmap(400, 400);
//scale the image in picBoxImage
Graphics gr;
gr = Graphics.FromImage(picBoxImage);
gr.DrawImage(original600x600, new Rectangle(0, 0, 400, 400));
gr.Dispose();
gr = null;
pictureBox1.Image = picBoxImage; //If at any time you want to change the image of
//pictureBox1, you dont't draw directly on the control
//but on picBoxImage and then Invalidate()
当用户 select 一个矩形,我们称它为 rectangleSelect
,在 pictureBox1
你需要将矩形 x, y, width, height
转换为原始的 600x600。你需要一些简单的数学:
//scaled unscaled with precision
x becomes -----------> x * (600 / 400) (int)( (double)x * (600D / 400D) )
y becomes -----------> y * (600 / 400) (int)( (double)y * (600D / 400D) )
width becomes -----------> width * (600 / 400) (int)( (double)width * (600D / 400D) )
height becomes -----------> height * (600 / 400) (int)( (double)height * (600D / 400D) )
希望对您有所帮助!
我有 2 个问题:
- 如何通过缩放比例获取图片在图片框内的显示区域?
- 示例:
- 我有一张图片 (1000 x 1000),我的任务是 "get an area (600 x 600) of that image"。
- 我创建了一个表单,然后是一个面板,里面有一个图片框,图片框的大小是 400 x 400,写一些代码让用户可以在框内拖动图片
- 我将图像加载到图片框中。由于所需区域是 600 x 600,但我的盒子只有 400 x 400,所以我用 0.67 系数缩放图像。
- 用户将select拖动图像到所需区域。
- 我怎样才能得到那个区域(从原始图像)?
- 示例:
- 如果我允许用户在该图片框中缩放in/out,我该如何处理?
因为图片是按picbox
缩放的,不能直接从picbox中取区域。诀窍是 un-scale
用户 select 的矩形并将其转换为原始矩形。
您需要两张图片:
Bitmap original600x600; //unscaled
Bitmap picBoxImage; //with 400x400 dimensions
当您的表单加载时:
original600x600 = new Bitmap(600, 600);
//Draw the portion of your 1000x1000 to your 600x600 image
....
....
//create the image of your pictureBox
picBoxImage= new Bitmap(400, 400);
//scale the image in picBoxImage
Graphics gr;
gr = Graphics.FromImage(picBoxImage);
gr.DrawImage(original600x600, new Rectangle(0, 0, 400, 400));
gr.Dispose();
gr = null;
pictureBox1.Image = picBoxImage; //If at any time you want to change the image of
//pictureBox1, you dont't draw directly on the control
//but on picBoxImage and then Invalidate()
当用户 select 一个矩形,我们称它为 rectangleSelect
,在 pictureBox1
你需要将矩形 x, y, width, height
转换为原始的 600x600。你需要一些简单的数学:
//scaled unscaled with precision
x becomes -----------> x * (600 / 400) (int)( (double)x * (600D / 400D) )
y becomes -----------> y * (600 / 400) (int)( (double)y * (600D / 400D) )
width becomes -----------> width * (600 / 400) (int)( (double)width * (600D / 400D) )
height becomes -----------> height * (600 / 400) (int)( (double)height * (600D / 400D) )
希望对您有所帮助!