특정 파일 이름 마스크 (*.tif
)와 일치하는 폴더의 모든 이미지를로드하고 있습니다. 한 번에 하나씩 이미지의 일부분을 가져 와서 출력 이미지에 넣고 그 옆에 어떤 파일이 왔는지 레이블을 붙이려면 DrawString
입니다. 출력 이미지를 저장할 때 가끔 일반 GDI + 오류가 발생합니다.이미지를 생성 할 때 일반 GDI +?
Rectangle source = new Rectangle(0, 0, 2500, 50);
Font font = new Font("Arial", 12);
String filename = new DirectoryInfo(dir).Name;
Rectangle divider = new Rectangle(0, 50, 2900, 5);
Brush lightgray = new SolidBrush(Color.FromArgb(235, 235, 235));
Console.WriteLine("Looking in \"" + dir + "\" for \"" + mask + "\"");
List<string> files = Directory.EnumerateFiles(dir, mask).ToList();
using (Bitmap output = new Bitmap(2900, (source.Height + divider.Height) * (files.Count + 1)))
{
using (Graphics g = Graphics.FromImage(output))
{
g.FillRectangle(Brushes.White, 0, 0, output.Width, output.Height);
Rectangle target = new Rectangle(new Point(), source.Size);
foreach (string file in files)
{
try
{
using (Bitmap cur = (Bitmap)Bitmap.FromFile(file))
{
g.DrawImage(cur, target, source, GraphicsUnit.Pixel);
}
}
catch
{
Point p1 = target.Location;
p1.Offset(3, 3);
g.DrawString("Not an Image File", font, Brushes.Black, p1);
}
finally
{
string name = Path.GetFileName(file);
g.DrawString(name, font, Brushes.Black, target.X + target.Width, target.Y + 4);
g.FillRectangle(lightgray, divider);
divider.Y += source.Height + divider.Height;
target.Y += source.Height + divider.Height;
}
}
Point p2 = target.Location;
p2.Offset(3, 3);
String type = "images";
if (mask == "*") type = "files";
if (files.Count == 1) type = type.Substring(0, type.Length - 1);
g.DrawString("Processed " + files.Count + " " + type, font, Brushes.Black, p2);
}
output.Save(filename + ".png", ImageFormat.Png);// GDI+ Error here
}
나는 특정 이미지에 대한 큰 이미지의 수천을 검색하는 데 문제가 있습니다. 생성 된 영역이 각 이미지의 상단에 있는데이 프로그램을 축적하여 한 곳에서 모든 파일의 해당 영역을 쉽게 찾을 수 있습니다. 앱을 하나의 폴더로 지정하면 작동하지만 다른 폴더를 가리키면 저장하지 않고 일반 GDI + 오류를 저장합니다. 이 원인은 무엇입니까?
출력 이미지의 크기가 될 수 있습니까? 나는 내 output
비트 맵을 만들 때 비트 맵의 생성자에서 오류를 던지고 있기 때문에 일부 폴더에 대해서는 100 % 확신하지 못했습니다. 크기 문제처럼 보였습니다. 생성자가 생성 할 수 있다면 상상할 수 있습니다. 저장하지 않아도됩니까?
비트 맵으로 저장하는 데 효과적입니다. 750MB 이하의 비트 맵이지만. –
그러면 메모리 문제 일 가능성이 큽니다. 여러 PNG로 일괄 처리하여 png 제한을 해결할 수 있습니다. 이전 png 파일을 언로드했는지 확인하십시오 (새 파일을 만들기 전에'.dispose '). –
PNG는 실제로 요구 사항이 아니며 단지 기본 설정입니다. 나는 그것을 BMP에 맡길 것이다. –