2011-03-22 6 views
0

배열에서 비트 맵을 만드는 데는 몇 가지 문제가 있습니다. 나는 카메라를 가지고 있으며, 이것으로부터 회색 음영 값을 짧은 형식으로 얻는다. 그러나이 값으로 비트 맵을 만드는 방법은 무엇입니까? 만 :ushort 배열에서 .bmp 만들기

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

내가 이미지를 얻을 및 창 도구를 열 수 있습니다,하지만 난 다른 그래픽 lib 디렉토리와 파일을 열 때, 나는 오류가 많이 얻을 그래서 이제 어떻게 누구를하지 :(작동하지 않습니다.. 사람이 몇 가지 코드 예제를 가지고 있습니까? 헤더 등과 함께 올바른 BMP 파일을 만들?이 당신은 올바른 치수 (폭, 높이)와 Bitmap을 만들어야합니다

감사

+0

견본 해석 방법에 대한 사양이 있습니까? – driis

+0

이제는 해상도 (예 : 160x160)와 나는 greyvalues가 16 비트에있게되었습니다. 따라서 65526이 가장 높은 값입니다. 이것은 과다 노출로 해석됩니다. – h0ppel

답변

2

. 대부분의 도움과에 LockBits을 사용 데이터를 .NET에서 지원되는 PixelFormat에 저장하면 LockBits에 전달할 수 있고 간단합니다. y 복사 데이터. 그렇지 않은 경우 일부 데이터 변환을 수동으로 수행해야 할 수 있습니다.

데이터 샘플을받는 형식이 모두 다되었지만 위의 설명은 이미지를 생성하는 데 필요한 단계에 대해 설명합니다.

업데이트 : 데이터가 16 비트 그레이 스케일이므로 직접 사용할 수있는 PixelFormat이 있습니다 (PixelFormat.16bppGrayScale).

0
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(); 
} 
+0

그래, 고마워,하지만 난 지금 픽셀에 맞는 색상을 설정하는 방법을 몰라. 23455, 58877과 같은 greyscalevalues가 있고 픽셀 색상을 다음과 같이 설정하면 : checks.SetPixel (cols, rows, color); 값을 변환해야합니까? 그리고 어떻게? thsnk – h0ppel

+0

[이 튜토리얼을 따르십시오] (http://www.switchonthecode.com/tutorials/csharp-tutorial-convert-a-color-image-to-grayscale) [또는이 하나] (http : // www. bobpowell.net/grayscale.htm) 이것은 다른 가능성을 설명합니다. – safi