создать .bmp из массива ushort - PullRequest
0 голосов
/ 23 марта 2011

У меня есть несколько проблем с созданием растрового изображения из массива. У меня есть камера, и из этого я получаю значения в градациях серого в формате ushort. Но как создать растровое изображение из этих значений? Только:

System.Drawing.Bitmap checks = new System.Drawing.Bitmap(10,  10);
.
.
checks.Save(@"C:\test.bmp", ImageFormat.Bmp);

не будет работать :(. Я получаю изображение и могу открыть его с помощью оконных инструментов, но когда я открою файл с другой графической библиотекой, я получу много ошибок. Так же как и сейчас любой, как создать правильный файл BMP с заголовком и т. д. у кого-нибудь есть пример кода? это поможет большинству.

спасибо

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Вы должны создать Bitmap с правильными размерами (ширина, высота) и использовать LockBits, чтобы получить дескриптор памяти, в которую вы должны писать.Если ваши данные находятся в PixelFormat с поддержкой .NET, вы можете передать это в LockBits и просто скопировать данные.В противном случае вам, возможно, придется выполнить какое-то преобразование данных вручную.

Все сводится к тому, в каком формате вы получаете образцы данных, но в приведенном выше описании излагаются шаги, которые необходимо предпринять для создания изображения.

Обновление : поскольку ваши данные имеют 16-битную серую шкалу, есть PixelFormat, который вы можете использовать напрямую, PixelFormat.16bppGrayScale.

0 голосов
/ 23 марта 2011
public class(path,wid,height,boolean)
{ 

System.Drawing.Image myThumbnail150;
            System.Drawing.Image.GetThumbnailImageAbort myCallback = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback);
            System.Drawing.Image imagesize = System.Drawing.Image.FromFile(pic.FilePath);
            using (Bitmap bitmapNew = new Bitmap(imagesize))
            {

            double maxWidth = Convert.ToDouble(ConfigurationSettings.AppSettings["ImageWidth"]);
            double maxHeight = Convert.ToDouble(ConfigurationSettings.AppSettings["ImageHeight"]);
            int w = imagesize.Width;
            int h = imagesize.Height;
            // Longest and shortest dimension 
            int longestDimension = (w > h) ? w : h;
            int shortestDimension = (w < h) ? w : h;
            // propotionality  
            float factor = ((float)longestDimension) / shortestDimension;
            // default width is greater than height    
            double newWidth = maxWidth;
            double newHeight = maxWidth / factor;
            // if height greater than width recalculate  
            if (w < h)
            {
                newWidth = maxHeight / factor;
                newHeight = maxHeight;
            }
            myThumbnail150 = bitmapNew.GetThumbnailImage((int)newWidth, (int)newHeight, myCallback, IntPtr.Zero);
            string name = pic.Name.Replace(Path.GetExtension(pic.Name), ".Bmp");

            //Create a new directory name ThumbnailImage
            //Save image in TumbnailImage folder
            myThumbnail150.Save(yourpath+ name, System.Drawing.Imaging.ImageFormat.Bmp);
            bitmapNew.Dispose();
}
...