获取BMP像素转16进制RGB565格式

来源:互联网 发布:肠道健康 知乎 编辑:程序博客网 时间:2024/06/05 02:04

  private string getBGR565(Bitmap Source)
             {
                 List<int> il = new List<int>(0);
                 string rstr = "";
                 int iWidth = Source.Width;
                 int iHeight = Source.Height;
                 Rectangle rect = new Rectangle(0, 0, iWidth, iHeight);
                 System.Drawing.Imaging.BitmapData bmpData = Source.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, Source.PixelFormat);//Source.PixelFormat);
                 IntPtr iPtr = bmpData.Scan0;
                 int iBytes = iWidth * iHeight * 3;
                 byte[] PixelValues = new byte[iBytes];
                 System.Runtime.InteropServices.Marshal.Copy(iPtr, PixelValues, 0, iBytes);
                 Source.UnlockBits(bmpData);                   // 注意这个地方图像的两维方向与数组两维的方向是转置的关系
                 int iPoint = 0;
                  for (int i = 0; i < iHeight; i++)
                 {
                     for (int j = 0; j < iWidth; j++)
                     {
                         int val = Convert.ToInt32(PixelValues[iPoint++]) >> 3 << 11;                       
                         val |= Convert.ToInt32(PixelValues[iPoint++]) >> 2 << 5;                       
                         val |= Convert.ToInt32(PixelValues[iPoint++]) >> 3;                     
                         int ti = val;
                         ti = ti & 255;
                         val = val >> 8;
                         il.Add(ti);
                         il.Add(val);
                      
                     }
                 }
            
                 rstr = String.Join(",0x", il.ConvertAll<string>(new Converter<int, string>(m => m.ToString("X2"))).ToArray());               
                 return "0x"+rstr;

             }

 

0 0