Доброго времени суток! Стоит такая задача. Есть массив byte значений (rgbValues), каждое значение которого представляет собой амплитуду пикселя изображения. Необходимо скопировать эти значение в bmp файл.
| Код | public Bitmap return_bmp() { Bitmap bmp = new Bitmap(size_of_line, size_of_row,PixelFormat.Format24bppRgb); Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat); IntPtr ptr = bmpData.Scan0; byte[] rgbValues = new byte[bmpData.Stride*bmpData.Height]; for (int i = 0; i < number_of_elements_in_array; i++) { rgbValues[i] = (byte)vals[i]; rgbValues[2 * i] = (byte)vals[i]; rgbValues[3 * i] = (byte)vals[i]; } System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bmpData.Stride*bmpData.Height); bmp.UnlockBits(bmpData); return bmp; }
|
Но почему то на выходе получается каша вместо изображения. Массив rgbValues содержит size_of_line точек для каждой линии (по горизонтали), следующее значение массива (то есть size_of_line+1) является первым пикселем второй линии и т.д. Не могу понять в чем дело. Помогите советом. Заранее спасибо. |