Вот в чем проблема. Я хочу открыть файл с локальных дисков, а затем преобразовать его в WritableBitmap, чтобы я мог его редактировать. Но проблема в том, что я не могу создать WritableBitmap из Uri или чего-то в этом роде. Также я знаю, как открыть файл в BitmapImage, но не могу понять, как открыть файл как WritableBitmap. Есть ли способ открыть файл непосредственно в WritableBitmap, если нет, есть ли способ преобразовать BitmapImage в WritableBitmap? Спасибо, парни.
Открытие файла изображения в WritableBitmap
comment
кажется, что мы можем передать растровое изображение прямо в конструктор записываемых битовых карт. Мой VS дал мне ошибки, когда я впервые попробовал, но теперь он, похоже, работает. Это был совсем не хороший вопрос, извините, ребята.
- person gkaykck   schedule 23.11.2010
comment
Он будет работать, но его размер будет изменен, если он превышает несколько мегапикселей.
- person Léon Pelletier   schedule 17.04.2013
Ответы (3)
Вы можете загрузить файл изображения в BitmapImage и используйте его как источник для своего WriteableBitmap:
BitmapImage bitmap = new BitmapImage(new Uri("YourImage.jpg", UriKind.Relative));
WriteableBitmap writeableBitmap = new WriteableBitmap(bitmap);
person
Frédéric Hamidi
schedule
23.11.2010
На самом деле, в Siverlight это исключение. Так что это не решение
- person Peter Lee; 27.12.2012
@Peter, какое исключение вы получите?
- person Frédéric Hamidi; 27.12.2012
BitmapImage bi = new BitmapImage(new Uri("header.png", UriKind.Relative)); WriteableBitmap wb = new WriteableBitmap(bi);
2-я линия System.NullReferenceException was unhandled by user code: Object reference not set to an instance of an object.
- person Peter Lee; 27.12.2012
@Peter, вы проверили, что
bi
не null
после вызова конструктора BitmapImage
? Если это так, вполне логично, что конструктор WriteableBitmap
потерпит неудачу.
- person Frédéric Hamidi; 27.12.2012
Да, проверял. Смотрите мой ответ. Не могли бы вы протестировать мой код на своей машине?
- person Peter Lee; 27.12.2012
Загрузка WriteableBitmap из BitmapImage на самом деле является обходным путем, поскольку окончательное изображение масштабируется в соответствии с ограничениями физического устройства. Таким образом, 5-мегапиксельное изображение можно масштабировать до 1-мегапиксельного изображения. Бесполезно, учитывая, что WriteableBitmap используется для обработки изображений.
- person Léon Pelletier; 17.04.2013
@ Питер Ли. Что вы получаете, если для параметра CreateOptions установлено значение None?
- person Léon Pelletier; 17.04.2013
@ LéonPelletier Я установил для параметра создания значение Нет, существует ошибка (Silverlight 5). В созданном источнике растрового изображения PixelHeight и PixelWidth равны нулю.
- person shalin; 16.07.2015
Я не эксперт и не имею немедленного доступа к intellisense и тому подобному, но вот ...
var fileBytes = File.ReadAllBytes(fileName);
var stream = new MemoryStream(fileBytes);
var bitmap = new BitmapImage(stream);
var writeableBitmap = new WritableBitmap(bitmap);
Даже если это не идеальный пример, этого должно быть достаточно, чтобы указать вам правильное направление. Надеюсь, что так.
person
Grant Thomas
schedule
23.11.2010
вы не можете передать растровое изображение непосредственно в записываемое растровое изображение
- person gkaykck; 23.11.2010
File.ReadAllBytes(fileName);
запрещено в Silverlight, кроме OpenFileDialog
- person Peter Lee; 27.12.2012
В Silverlight 5 вы можете использовать метод ниже, чтобы открыть файл с локального диска, преобразовать его в BitmapImage и преобразовать в WriteableBitmap;
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = false;
dlg.ShowDialog();
byte[] byteArray = new byte[] { };
if (dlg.File == null) return;
BitmapImage bi = new BitmapImage();
bi.CreateOptions = BitmapCreateOptions.None;
// bi.UriSource = new Uri(@"C:\Users\saw\Desktop\image.jpg", UriKind.RelativeOrAbsolute);
bi.SetSource(dlg.File.OpenRead());
WriteableBitmap eb=new WriteableBitmap(bi);
установка нового Uri дала мне ошибку (ссылка на объект не установлена на экземпляр объекта) при попытке создать WriteableBitmap
person
shalin
schedule
16.07.2015