2010-10-03 5 views
0

У меня есть 3 растровых изображения размером около 28-30 МБ. Моему приложению нужно часто обращаться к пикселям из этих изображений.Добавить байт [] в ресурсы в wpf C#

В настоящее время я создаю BitmapData из всех трех файлов, фиксируя их, а затем считывая все пиксели в 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-х изображений в ресурсах приложения, так что он может получить прямой доступ и преобразование изображений в байт [] не требуется. Затем производительность должна увеличиться.

Будет ли вышеуказанный способ доработать?

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

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

Благодаря

ответ

3

Что я хотел бы сделать это:

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

+0

спасибо. Я понял! –

Смежные вопросы