イメージの行または列をチェックし、すべての白いピクセルが含まれている場合は、その行または列をトリミングします。 理由はわかりませんが、このコードスニペットを実行すると、TrimLeftのimg.Widthは1で、その前に1が減ります。 実際の画像幅は175です。私は最終的にArgumentExceptionで終わります。私は右サイドをトリミングするための同様の方法があり、それはうまく動作します。それは非常に非効率的になるようにC#ビットマップの問題
class ImageHandler
{
public Bitmap img;
public List<int[]> pixels = new List<int[]>();
public ImageHandler(String path)
{
img = new Bitmap(path);
GetPixels();
}
public void TrimLeft()
{
while (CheckColIfWhite(0, 0))
{
Rectangle cropBox = new Rectangle(1, 0, (img.Width-1), img.Height);
Bitmap cropdImg = CropImage(img, cropBox);
img = cropdImg;
}
}
public bool CheckColIfWhite(int colx, int starty)
{
bool allPixelsWhite = false;
int whitePixels = 0;
for (int y = starty; y < img.Height; y++)
{
if (pixels[y][colx] >= 200) { whitePixels++; }
else { return false; }
if (whitePixels == img.Height) { allPixelsWhite = true; }
}
return allPixelsWhite;
}
public void GetPixels()
{
for (int y = 0; y < img.Height; y++)
{
int[] line = new int[img.Width];
for (int x = 0; x < img.Width; x++)
{
line[x] = (int) img.GetPixel(x, y).R;
}
pixels.Add(line);
}
}
public Bitmap CropImage(Bitmap tImg, Rectangle area)
{
Bitmap bmp = new Bitmap(tImg);
Bitmap bmpCrop = bmp.Clone(area, bmp.PixelFormat);
return bmpCrop;
}
}
これはVだった:0)
また
、ないなぜあなたは、事前に画素配列を抽出しているので、私はあまりにも私の再書かれ
CheckColIfWhite
を入れていることを確認でええ、ありがとうございました。私の方法は非効率的であることは分かっていましたが、それについてもっと良い方法は見当たりませんでした。私はもともと、ファイルの複数の読み込みを保存するために、画像からすべてのピクセルを取得しました。 – sjensen85