我在剪切图像时遇到问题。
我想要做的是,在一些切片中切割图像,主要是二次的。该代码尚未针对边界值进行细化,不应将整个图像切割成适当的大小,但这目前不是问题。
我的问题是,被剪切的第一张图像实际上是原始图像的一部分,但第二张图像(或之后的所有图像)只有黑色。我只是在死胡同,我不知道问题是什么。
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 )。不过没关系。
问题是,第二个不是图像,而是黑色的。