Я имею дело с растровыми изображениями в моем приложении, и для некоторых целей мне нужно создать глубокую копию растрового изображения. Есть ли элегантный способ, как это сделать?
Я пробовал
Bitmap deepCopy = original.Clone();
очевидно, это не создает глубокую копию, но мелкую. Моя следующая попытка состояла в создании нового растрового изображения
Bitmap deepCopy = new Bitmap(original);
К сожалению, этот конструктор - Bitmap (Image), а не Bitmap (Bitmap) и Bitmap (Image) преобразует мой красивый 8bppIndexed Pixelformat в другой.
Другая попытка заключалась в использовании MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
Ну, это тоже не сработает, так как MemoryStream должен быть открыт в течение всего срока службы Bitmap.
Итак, я подытожил все свои предсказания, и мне очень хотелось бы увидеть красивый элегантный способ создания глубокой копии Bitmap. Спасибо за это:)