您的位置:首页 > 其它

图片分割的程序

2008-08-27 15:25 141 查看
自己做的图片分割的小系统

能把一张大图片按照自己指定的大小来分割成几个小图片,比如 100*100的一个图片可以把它分割成10张100*10的图片,能保存当前流行的格式。具有错误日志功能,后台线程处理图片切割

这里小弟附上源代码,供大家参考,做的很粗陋,大家有什么好的想法可以交流下

源码下载地址:ImageCutOrSplit

核心代码如下:

/// <summary>

/// 图片分割

/// </summary>

/// <param name="originalPath">原始图片路径</param>

/// <param name="portionWidth">分割后图片宽</param>

/// <param name="portionHeight">分割后图片高</param>

/// <param name="savePath">保存路径</param>

/// <param name="fileName">文件名</param>

/// <param name="format">图片格式</param>

/// <param name="isSave">是否保存</param>

/// <returns>返回值</returns>

public static Image[] SplitImage(string originalPath, int portionWidth, int portionHeight, string savePath, string fileName, ImageFormat format, bool isSave)

{

Image[] images = null;

if (!File.Exists(originalPath))

return images;

using (Stream imgStream = File.OpenRead(originalPath))

{

using (Bitmap bmp = new Bitmap(imgStream))

{

images = Split(bmp, portionWidth, portionHeight, savePath, fileName, format, isSave);

}

}

return (Image[])images.Clone();

}

/// <summary>

/// 分割图片

/// </summary>

/// <param name="img">原始图片</param>

/// <param name="portionWidth">分割后图片宽</param>

/// <param name="portionHeight">分割后图片高</param>

/// <param name="savePath">保存路径</param>

/// <param name="fileName">文件名</param>

/// <param name="format">图片格式</param>

/// <param name="isSave">是否保存</param>

/// <returns>返回值</returns>

private static Image[] Split(Image img, int portionWidth, int portionHeight, string savePath, string fileName, ImageFormat format, bool isSave)

{

int imgIndex = 0;

//原始图片能分割成多少块新规格的图片

int maxHeight = img.Height;

int maxWidth = img.Width;

int heightNumber = (maxHeight % portionHeight) > 0 ? (maxHeight / portionHeight) + 1 : (maxHeight / portionHeight);

int widthNumber = (maxWidth % portionWidth) > 0 ? (maxWidth / portionWidth) + 1 : (maxWidth / portionWidth);

int allNumber = heightNumber * widthNumber;

Image[] images = new Image[allNumber];

using (Bitmap imgSplitted = new Bitmap(portionWidth, portionHeight))

{

using (Graphics g = Graphics.FromImage(imgSplitted))

{

for (int y = 0; y < maxHeight; y += portionHeight)

{

for (int x = 0; x < maxWidth; x += portionWidth)

{

try

{

g.Clear(Color.Transparent);

g.DrawImage(img, new Rectangle(0, 0, portionWidth, portionHeight), x, y, portionWidth, portionHeight, GraphicsUnit.Pixel);

g.Save();

if (isSave)

{

if (!Directory.Exists(savePath))

{

Directory.CreateDirectory(savePath);

Thread.Sleep(1000);

}

imgSplitted.Save(Path.Combine(savePath, fileName + imgIndex.ToString() + "." + format.ToString()), format);

}

images[imgIndex] = imgSplitted.Clone() as Image;

imgIndex++;

}

catch (Exception ex)

{

throw new LogException("Split", ex.Message);

}

}

}

}

}

return images;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: