У меня есть 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 изображений к ресурсам приложения, чтобы к нему можно было получить прямой доступ, и преобразование изображений в байт [] не потребуется.
Производительность должна увеличиться.
Подойдет ли вышеуказанный метод к уловке?
Мне нужно знать, как преобразовать изображения в байты [], а затем добавить их в ресурсы приложения?
Есть ли другое решение проблемы?
Спасибо