У меня есть сторонняя dll, которая генерирует растровое изображение и отправляет обратно ссылку. Если я сразу же сгенерирую System.Windows.Media.Imaging.BitmapSource, то все будет хорошо. Но если я сохранить ссылку и в дальнейшем (через несколько секунд, и многие вызовов функций) Я пытаюсь генерировать BitmapSource, я получаюПроходит System.Drawing.Bitmap через библиотеки классов ненадежны?
System.AccessViolationException было необработанного кодом пользователя
Message = Попытка чтения или написать защищенную память. Это часто указывает на то, что другая память повреждена. Источник = "System.Drawing"
при выполнении:
System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bmp.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
Любые подсказки о том, что происходит здесь не так? Любые указатели будут полезны. Благодарю.
К сожалению, это не имеет ничего общего с файловыми дескрипторами. См. Ответ Андраса для правильного объяснения. Однако мне понравилось ваше решение для копирования Bitmap для работы с ошибкой (+1). Если внутренние структуры данных mishal153 требуют Bitmap, а не BitmapSource, он должен использовать код, как вы опубликовали. Если нет, ему будет лучше всего просто создать BitmapSource сразу вместо создания нового Bitmap. –
Hi Brandi, Ваши предлагаемые работы похожи на песню :). Благодаря! Я пытался сделать то же самое, но так, как я это делал, это: newBmp = oldBmp.Clone(); «Документация клона говорила:« Создает точную копию этого изображения », поэтому я подумал, что сделал глубокую копию. Что действительно запутывает, так это то, что документация конструктора Bitmap говорит: «Инициализирует новый экземпляр класса Bitmap из указанного существующего изображения», и это звучит как его просто обертывание существующего изображения, когда он делает глубокий copy :). Это только я или это смущает других. спасибо, ребята – mishal153
Рад помочь. :) – Brandi