Example #1
0
        /// <summary>
        /// 条件に従って画像を矩形にトリミングします
        /// </summary>
        /// <param name="img">対象の画像</param>
        /// <param name="isTrimming">トリミング条件</param>
        /// <returns>トリミング済み画像</returns>
        public static Bitmap Trimming(Bitmap img, IsTrimming isTrimming)
        {
            //必要な範囲
            int l = 0;
            int t = 0;
            int r = img.Size.Width - 1;
            int b = img.Size.Height - 1;

            /*範囲を求める*/
            //左
            for (int x = 0; x < r; x++)
            {
                if (NeedH(img, x, isTrimming))
                {
                    l = x;
                    break;
                }
            }

            //t
            for (int y = 0; y < b; y++)
            {
                if (NeedW(img, y, isTrimming))
                {
                    t = y;
                    break;
                }
            }

            //r
            for (int x = img.Size.Width - 1; x >= 0; x--)
            {
                if (NeedH(img, x, isTrimming))
                {
                    r = x;
                    break;
                }
            }

            //b
            for (int y = img.Size.Height - 1; y >= 0; y--)
            {
                if (NeedW(img, y, isTrimming))
                {
                    b = y;
                    break;
                }
            }

            //トリミング
            Bitmap newImg = img.Clone(new Rectangle(new Point(l, t), new Size(r - l + 1, b - t + 1)), img.PixelFormat);

            img.Dispose();
            return(newImg);
        }
Example #2
0
 /// <summary>
 /// 指定された横行は必要か
 /// </summary>
 /// <param name="img">画像</param>
 /// <param name="y">調べたい行のy座標</param>
 /// <returns>必要か</returns>
 private static bool NeedW(Bitmap img, int y, IsTrimming isTrimming)
 {
     for (int x = 0; x < img.Size.Width; x++)
     {
         if (isTrimming(img.GetPixel(x, y)))
         {
             return(true);                               //一つでも必要なピクセルがあるなら
         }
     }
     return(false);
 }
Example #3
0
 /// <summary>
 /// 指定された縦列は必要か
 /// </summary>
 /// <param name="img">画像</param>
 /// <param name="x">調べたい列のx座標</param>
 /// <returns>必要か</returns>
 private static bool NeedH(Bitmap img, int x, IsTrimming isTrimming)
 {
     for (int y = 0; y < img.Size.Height; y++)
     {
         if (isTrimming(img.GetPixel(x, y)))
         {
             return(true);                               //一つでも必要なピクセルがあるなら
         }
     }
     return(false);
 }