Это мой код:
Bitmap bmp = ImageManipulator.GetMyImageModified(bmp);
Bitmap tempBMP = ImageManipulator.cropImage(bmp, rect);
tempBMP = ImageManipulator.CopyToBpp(tempBMP, 1);
string bmpFilename = String.Format("File{0}.png", indexNum);
tempBMP.Save(bmpFilename, ImageFormat.Png);
Теперь я видел, что для объектов IDisposable лучше всего использовать оператор using для удаления этих объектов, как только они больше не нужны.Я хочу следовать этой практике и поэтому мне нужна помощь в переписывании приведенного выше кода:
using (Bitmap bmp = ImageManipulator.GetMyImageModified(bmp){
Bitmap tempBMP = ImageManipulator.cropImage(bmp, rect); // bmp should be disposed after this line
tempBMP = ImageManipulator.CopyToBpp(tempBMP, 1);
string bmpFilename = String.Format("File{0}.png", indexNum);
tempBMP.Save(bmpFilename, ImageFormat.Png);
} // bmp is disposed here
Это моя первая попытка, но она не идеальна, поскольку растровое изображение bmp не удаляется в ближайшее времякак больше не нужно, хотя в этом конкретном примере не должно быть обязательным, чтобы он был расположен так быстро.
tempBitmap более проблематично, потому что я не могу переназначить ссылку на новый объект внутри использованияоператор, который должен быть добавлен:
Bitmap tempBMP = ImageManipulator.cropImage(bmp, rect);
Действительно tempBMP ссылка становится readonly после окружения указанной строки строчкой с использованием ключевого слова .
Кроме того, tempBMP сохраняется в файл, и операция сохранения должна быть асинхронной, и тогда я не знаю таких последствий утилизации, как:
tempBMP.Save(bmpFilename, ImageFormat.Png);
Get call.
Если вы можете помочь мне написать лучший код, я весь слух.