画像の切り取りに問題があります。
私がやりたいのは、画像をいくつかのスライスにカットすることです。ほとんどが2次式です。コードはまだ境界値用に改良されておらず、画像全体を適切なサイズにカットするべきではありませんが、それは現在問題ではありません。
私の問題は、カットされた最初の画像は実際には元の画像の一部ですが、2番目の画像(またはその後のすべて)は黒だけであるということです。私は行き止まりになっていて、何が問題なのかわかりません。
var sourceImg = System.Drawing.Image.FromFile(args[numcount]);
int cutsizeHeight = sourceImg.Height < cutsize ? sourceImg.Height : cutsize;
int cutsizeWidht = sourceImg.Width < cutsize ? sourceImg.Width : cutsize;
int cutPassesHeight = (int)(sourceImg.Height / cutsize) == 0 ? 1 : (int)(sourceImg.Height / cutsize);
int cutPassesWidth = (int)(sourceImg.Width / cutsize) == 0 ? 1 : (int)(sourceImg.Width / cutsize);
for (int i = 0; i < cutPassesHeight; i++)
{
for (int j = 0; j < cutPassesWidth; j++)
{
var mem = new MemoryStream();
var sourcePositionX = i * cutsizeHeight;
var sourcePositionY = j * cutsizeWidht;
var cutRectangle = new System.Drawing.Rectangle(0, 0, cutsizeWidht, cutsizeHeight);
var newImage = new Bitmap(cutRectangle.Width, cutRectangle.Height);
Graphics g = Graphics.FromImage(newImage);
g.DrawImage(sourceImg, cutRectangle, sourcePositionX, sourcePositionY, cutsizeWidht, cutsizeHeight, GraphicsUnit.Pixel);
newImage.Save(mem, ImageFormat.Png);
var saveImage = System.Drawing.Image.FromStream(mem);
var fileName = System.IO.Path.GetFileName(args[numcount]);
var pureName = fileName.Split('.');
fileName = pureName[0] + i.ToString() + "_" + j.ToString() + ".png";
saveImage.Save(@"C:\usr\test\" + fileName);
}
}
これは私のコードスニペットです。現在、画像サイズ5906*1773でテストしています。カットされた画像あたりのスライスサイズは2096*1773である必要があります。したがって、上記のコードは、幅の残りの1714(2096 * 2 = 4192、残りの5906-4192 = 1714)を無視します。 )。しかし、それは大丈夫です。
問題は、2番目の画像は画像ではなく、黒であるということです。