Добавьте byte [] к ресурсам в wpf c # - PullRequest
0 голосов
/ 03 октября 2010

У меня есть 3 растровых изображения, каждое размером около 28-30 МБ. Моему приложению необходим частый доступ к пикселям из этих изображений.

В настоящее время я создаю BitmapData для всех 3 файлов, блокирую их и затем читаю все пиксели в 3 различных байтах []. Ниже приведен код для одного изображения:

System.Drawing.Imaging.BitmapData bmpData = result.LockBits(new System.Drawing.Rectangle(0, 0, result.Width , result.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite,((System.Drawing.Bitmap)Properties.Resources.bmp1).PixelFormat);
int pixelBytes = System.Drawing.Image.GetPixelFormatSize(((System.Drawing.Bitmap)Properties.Resources.silk_box).PixelFormat) / 8;
System.IntPtr ptr = bmpData.Scan0;
int size = bmpData.Stride * result.Height;
byte[] pixels = new byte[size];
System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size);

Все 3 растровых изображения добавляются в ресурсы приложения.

Приходя к проблеме ... Хотя вышеописанный метод работает нормально. Единственная проблема - производительность. Преобразование растрового изображения в байт [] и доступ к определенному пикселю занимает около 10-12 секунд.

Я предполагаю, что следующая строка занимает много времени:

System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, size);

Для этой цели я думаю добавить байт [] всех 3 изображений к ресурсам приложения, чтобы к нему можно было получить прямой доступ, и преобразование изображений в байт [] не потребуется. Производительность должна увеличиться.

Подойдет ли вышеуказанный метод к уловке?

Мне нужно знать, как преобразовать изображения в байты [], а затем добавить их в ресурсы приложения?

Есть ли другое решение проблемы?

Спасибо

1 Ответ

3 голосов
/ 03 октября 2010

Я бы сделал следующее:

Добавьте файл bmp непосредственно как файл ресурс вашего dll / exe.Затем вы можете прочитать заголовок BMP из файла.Это не так уж много работы, особенно если вам не нужно поддерживать все возможные варианты формата BMP.Если вы хотите прочитать отдельные пиксели, вы можете Seek в ресурсе файла с соответствующим индексом.В противном случае вы можете прочитать весь массив в памяти из файла ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...