0

PNG形式のフレーム(スタイル付きの境界線)のみを含む画像がたくさんあります。画像の中央はすべて透明です。透明度なしでフレームの高さと幅を検出する方法を探しています。GDI + C#でピクセルごとに確認してみましたが、正しく動作させることができませんでした。

これはすべて、上部フレームの高さと下部フレームの高さが同じ高さであり、右フレームの幅と左フレームの幅が同じ幅であると想定しています。

フレームは線形であり、特別なグリッチがあってはなりません。したがって、右側のフレームの幅を検出した場合、左側のフレームと同じである必要があります。

誰かがこれを達成する方法について何か考えを持っていることを願っています。

フレームの例:

フレームの例http://www.digitalimageautorotate.com/images/frame_demo.png

4

1 に答える 1

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;
}
于 2012-10-01T06:30:57.753 に答える