我想从一组PNG中创建一个大的PNG文件(最多25个文件,每个4080 x 800像素)。
我期望的结果是包含所有堆叠图像的单个PNG。
我写了这段代码:
private void PngCreate(List<FileInfo> imageListRef, string basePathPng, string filenamePng, int counter)
{
if (imageListRef.Count > 0)
{
try
{
List<int> imageHeights = new List<int>();
int width = 0;
int height = 0;
foreach (FileInfo file in imageListRef)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(file.FullName);
width = img.Width;
height += img.Height;
img.Dispose();
}
Bitmap bigImage = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bigImage);
int y = 0;
foreach (FileInfo file in imageListRef)
{
System.Drawing.Image img = System.Drawing.Image.FromFile(file.FullName);
g.DrawImage(img, new Point(0, y));
y += img.Height;
img.Dispose();
}
g.Dispose();
if (!Directory.Exists(basePathPng))
Directory.CreateDirectory(basePathPng);
bigImage.Save(filenamePng, System.Drawing.Imaging.ImageFormat.Png);
bigImage.Dispose();
}
catch (Exception ex)
{
debugLogger.Debug(ex.Message);
throw ex;
}
}
}
但是我的内存不足bigImage
(4080 x 20000)。
在这种情况下我该怎么办?
我考虑过降低或压缩单张图像的分辨率,但我不知道该怎么做。
我不想失去图像的质量。