获取帧图像的宽度和高度,绕过所有中心透明度

时间:2012-09-29 17:52:00

标签: c# winforms gdi+

我有很多图像只包含PNG格式的帧(样式边框)。 图像的所有中心都是透明的。 我正在寻找一种方法来检测框架高度和宽度没有透明度。 我在GDI + C#中逐个像素地尝试检查,但没有设法让它正常工作。

所有这些假设顶部框架高度和底部框架高度具有相同的高度,右框架宽度和左框架宽度具有相同的宽度。

帧是线性的,不应该有任何特殊毛刺,所以如果我检测到右帧的宽度,我应该是左帧的相同。

希望任何人都知道如何实现这一目标。

框架示例:

Frame example http://www.digitalimageautorotate.com/images/frame_demo.png

1 个答案:

答案 0 :(得分:0)

通常在处理图像时,使用.LockBits和指针来提高速度,因为您通常会一遍又一遍地访问数百万像素。 (如果你没有这样做 - 你可能会忽略它,因为你没有意识到你会得到多少开销)。

然而,在这个的情况下,您将访问非常少的像素,因此.GetPixel实际上应该完全按顺序排列。

public Size GetBorderSize(Bitmap bmp)
{
    var hx = bmp.Width/2;
    var hy = bmp.Height/2;
    var sz = new Size();
    while ( bmp.GetPixel(sz.Width, hy).A == 255 && sz.Width < hx)
        sz.Width++;
    while (bmp.GetPixel(hx, sz.Height).A == 255 && sz.Height < hy)
        sz.Height++;
    return sz;
}