2011-02-09 67 views
2

這裏是我的Java代碼:C#equivilent Java的java.awt.image.DataBuffer中

import java.awt.image.DataBuffer; 

public class B extends DataBuffer 
{ 
    public float[][] a; 
    public float[] b; 

    public float[] a() 
    { 
    return this.b; 
    } 
} 

問題是簡單明瞭。什麼是C#等價於java.awt.image.DataBuffer?

或者我需要備份一個級別,並找到相當於java.awt.image?

TIA,

KeithC

+1

我讀了'DataBuffer`上的Java文檔,我看不到它的目的是什麼。它似乎是一個在數組之上的抽象。在C#中,您可以使用數組,例如int []`,`float []`等等。 – Timwi 2011-02-09 23:10:52

回答

0

這聽起來像你正在嘗試做一些圖像處理的。您似乎需要直接訪問位圖的像素數據,因爲方法調用會太慢。爲此,.NET提供了Bitmap.LockBits。這裏有一個例子如何使用此:

var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
unsafe 
{ 
    var data = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); 
    for (int y = 0; y < height; y++) 
    { 
     var b = (byte*) data.Scan0 + y * data.Stride; 
     for (int x = 0; x < width; x++) 
     { 
      var blue = b[4 * x]; 
      var green = b[4 * x + 1]; 
      var red = b[4 * x + 2]; 
      var alpha = b[4 * x + 3]; 

      // ... do whatever you want with these values ... 
     } 
    } 
    bmp.UnlockBits(data); 
} 
return bmp; 

爲了使用它,你需要啓用在您的項目不安全的代碼。在項目屬性中的「生成」選項卡上,啓用選項允許不安全的代碼