C#Graphics类:获取绘制内容的大小

时间:2010-03-17 18:13:47

标签: c# image graphics drawing bitmap

我正在动态地写一个Graphics对象,并且在通过所有输出之前不知道最终图像的实际大小。

所以,我创建一个大图像并从中创建Graphics对象:

int iWidth = 600;
int iHeight = 2000;

bmpImage = new Bitmap(iWidth, iHeight);            
graphics = Graphics.FromImage(bmpImage);
graphics.Clear(Color.White);        

如何找到书面内容的实际大小,这样我就可以创建一个具有此大小的新位图,并将内容复制到其中。

在绘制内容之前很难计算内容大小,并想知道是否还有其他解决方案。

1 个答案:

答案 0 :(得分:2)

最佳解决方案可能是跟踪绘制时使用的最大X和Y值,尽管这将是一个完全手动的过程。

另一种选择是扫描位图的完整行和列(从右侧和底部开始),直到遇到非白色像素,但这将是一个非常低效的过程。

int width = 0;
int height = 0;

for(int x = bmpImage.Width - 1, x >= 0, x++)
{
    bool foundNonWhite = false;

    width = x + 1;

    for(int y = 0; y < bmpImage.Height; y++)
    {
        if(bmpImage.GetPixel(x, y) != Color.White)
        {
            foundNonWhite = true;
            break;
        }
    }

    if(foundNonWhite) break;
}

for(int y = bmpImage.Height - 1, x >= 0, x++)
{
    bool foundNonWhite = false;

    height = y + 1;

    for(int x = 0; x < bmpImage.Width; x++)
    {
        if(bmpImage.GetPixel(x, y) != Color.White)
        {
            foundNonWhite = true;
            break;
        }
    }

    if(foundNonWhite) break;
}

同样,我不建议将其作为解决方案,但 执行您想要的操作,而无需跟踪实际使用的坐标空间