2011-04-14 78 views
0

對不起,以前的帖子。我現在在這裏顯示完整的代碼。 我需要知道什麼是bitmap.Width和bitmap.Height - 1,也是bitmap.Scan0。 我在網上搜索,但沒有給出任何完整的解釋。 我會感謝任何人可以簡要解釋整個事情。謝謝。c#位圖問題

public static double[][] GetRgbProjections(Bitmap bitmap) 
     { 
      var width = bitmap.Width - 1; 
      var height = bitmap.Height - 1; 

      var horizontalProjection = new double[width]; 
      var verticalProjection = new double[height]; 

      var bitmapData1 = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); 

      unsafe 
      { 
       var imagePointer1 = (byte*)bitmapData1.Scan0; 

       for (var y = 0; y < height; y++) 
       { 
        for (var x = 0; x < width; x++) 
        { 
         var blu = imagePointer1[0]; 
         var green = imagePointer1[1]; 
         var red = imagePointer1[2]; 

         int luminosity = (byte)(((0.2126 * red) + (0.7152 * green)) + (0.0722 * blu)); 

         horizontalProjection[x] += luminosity; 
         verticalProjection[y] += luminosity; 

         imagePointer1 += 4; 
        } 

        imagePointer1 += bitmapData1.Stride - (bitmapData1.Width * 4); 
       } 
      } 

      MaximizeScale(ref horizontalProjection, height); 
      MaximizeScale(ref verticalProjection, width); 

      var projections = 
       new[] 
        { 
         horizontalProjection, 
         verticalProjection 
        }; 

      bitmap.UnlockBits(bitmapData1); 
      return projections; 
     } 

回答

1

顯然它貫穿一個RGBA位圖的每個像素和每個像素計算其亮度的兩個陣列內軌道,每水平行和每個垂直線光度光度。

除非我錯了,-1甚至不應該在那裏。當你有一個100x100的位圖時,你想要創建一個包含100個元素的數組,而不是一個包含99個元素(寬度-1)的數組,因爲你想跟蹤每條水平線和垂直線。

+0

+1我同意。開發人員可能犯了一個錯誤,因爲數組使用基於零的索引,但是當初始化數組時,您需要指定數組的確切長度。 – sgmeyer 2011-04-14 13:21:01