回答这个问题有点晚了,但我想我会这样做,因为当我试图回答“我的图片框可以容纳多少毫米?”这个问题时,我在谷歌中找到了它,它会为我节省很多时间而不是必须弄清楚如何去做!GetBounds 是无用的(如果你想要它以像素为单位......)但可以使用 Graphics.TransformPoints 方法找到绘图单位和显示像素之间的关系:
private void Form1_Load(object sender, EventArgs e)
{
Bitmap b;
Graphics g;
Size s = pictureBox1.Size;
b = new Bitmap(s.Width, s.Height);
g = Graphics.FromImage(b);
PointF[] points = new PointF[2];
g.PageUnit = GraphicsUnit.Millimeter;
g.PageScale = 1.0f;
g.ScaleTransform(1.0f, 1.0f);
points[0] = new PointF(0, 0);
points[1] = new PointF(1, 1);
g.TransformPoints(CoordinateSpace.Device, CoordinateSpace.Page, points);
MessageBox.Show(String.Format("1 page unit in {0} is {1} pixels",g.PageUnit.ToString(),points[1].X));
points[0] = new PointF(0, 0);
points[1] = new PointF(1, 1);
g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, points);
MessageBox.Show(String.Format("1 page unit in {0} is {1} pixels",g.PageUnit.ToString(),points[1].X));
g.ResetTransform();
pictureBox1.Image = b;
SolidBrush brush = new SolidBrush(Color.FromArgb(120, Color.Azure));
Rectangle rectangle = new Rectangle(10, 10, 50, 50);
// Fill in the rectangle with a semi-transparent color.
g.FillRectangle(brush, rectangle);
pictureBox1.Invalidate();
}
这将显示基本 mm 以显示像素(在我的情况下为 3.779527) - 世界坐标为每像素 1 mm,如果您应用 graphics.ScaleTransform,这将改变。
编辑:当然,如果您将位图分配给图片框图像属性(并保留 Graphics 对象以允许根据需要进行更改),这会有所帮助。