Мне нужно импортировать большое количество обрезанных изображений из множества изображений, которые все готовы сохранить в моей базе данных. Я пытался использовать операторы и избавляться от своих растровых объектов каждый раз. Но я все еще получаю исключение переполнения памяти, что моей системе не хватает памяти.
Вот пример кода того, что я делаю.
public void CropImage(List<ImageClass> data)
{
foreach (var obj in data)
{
//I have a data base method that returns a data object that
//contains the file bytes of the image id in data: 'file'
//My List<ImageClass> data contains an ID of the original image
//start x,y coords for the upper left corner of the rectangle,
//and the width and height of the rectangle.
Image img = Image.FromStream(new MemoryStream(file.Data));
Bitmap bmp = new Bitmap((Bitmap)img);
Rectangle cropArea = new Rectangle(obj.x_coordinate,
obj.y_coordinate,
obj.width,
obj.height);
Bitmap cropImage = bmp.Clone(cropArea, bmp.PixelFormat);
SaveFile(cropImage, file, obj.scanID);
img.Dispose();
bmp.Dispose();
cropImage.Dispose();
}
}
public void SaveFile(Bitmap cropImage, FileData file, int OCRscanID)
{
EncoderParameters encoderParams = new EncoderParameters();
encoderParams.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality,
50L);
ImageCodecInfo codecInfo = GetEncoderInfo("image/jpeg");
MemoryStream newImage = new MemoryStream();
cropImage.Save(newImage, codecInfo, encoderParams);
byte[] newData = newImage.ToArray();
//Saving data bytes to database of the cropped image
}
private ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Я знаю, что могу урезать часть кода, например, поиск кодера, чтобы просто использовать изображение / JPEG. Но у меня было другое приложение для этого кода другого проекта. Я просто не могу преодолеть переполнение памяти.
Мне нужно просмотреть около 20 тыс. Изображений.