Самым простым способом может быть создание растрового изображения (хотя в аналогичном коде я использовал обычный byte[]
, а затем fixed
блок, а не непосредственно с помощью AllocCoTaskMem
), и затем создайте секунду Bitmap
того же размера. Вызовите Graphics.FromImage
во втором растровом изображении, затем Graphics.DrawImage
, используя растровое изображение first , чтобы эффективно скопировать содержимое первого растрового изображения во второе. Затем вы можете вызвать Dispose
для первого растрового изображения, освободить память и использовать второе растровое изображение, которое в основном является копией.
Возможно, есть более эффективный способ сделать это, если вы более опытны с изображениями, но если вы просто ищете способ заставить его работать, это отправная точка:)
РЕДАКТИРОВАТЬ: комментарий zachrrs действительно облегчает использование конструктора Bitmap (Image) :
using (Bitmap original = new Bitmap(...))
{
Bitmap copy = new Bitmap(originalImage);
// Then return "copy" from your method, and you can free the
// memory
}