【问题标题】:Get the width and height of an frame image bypassing all the center transparency绕过所有中心透明度获取帧图像的宽度和高度
【发布时间】:2012-10-01 14:30:57
【问题描述】:

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

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

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

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

框架示例:

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

【问题讨论】:

  • 你能告诉我们你试过的代码吗?
  • 对不起,代码看起来很丑,我删除了它,因为它根本不起作用......

标签: c# winforms gdi+


【解决方案1】:

通常在处理图像时,您会使用 .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;
}

【讨论】:

  • 嗨,我会试试这个并告诉你。
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
  • 2011-11-26
相关资源
最近更新 更多