我正在动态地写一个Graphics对象,并且在通过所有输出之前不知道最终图像的实际大小。
所以,我创建一个大图像并从中创建Graphics对象:
int iWidth = 600;
int iHeight = 2000;
bmpImage = new Bitmap(iWidth, iHeight);
graphics = Graphics.FromImage(bmpImage);
graphics.Clear(Color.White);
如何找到书面内容的实际大小,这样我就可以创建一个具有此大小的新位图,并将内容复制到其中。
在绘制内容之前很难计算内容大小,并想知道是否还有其他解决方案。
答案 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;
}
同样,我不建议将其作为解决方案,但将 执行您想要的操作,而无需跟踪实际使用的坐标空间