2013-02-19 5 views
5

WriteableBitmap私は安全でない方法でピクセルをプロットしています。C#でポインタを汎用化するにはどうすればよいですか?

private unsafe void DrawBitmap(WriteableBitmap bitmap, byte[] pixels) 
{ 
     // Boilerplate omitted... 

     fixed (byte* pPixels = pixels) 
     { 
      for (int y = 0; y < height; y++) 
      { 
       var row = pPixels + (y * width); 
       for (int x = 0; x < width; x++) 
       { 
        *(row + x) = color[y + height * x]; 
       } 
      } 
     } 

     bitmap.WritePixels(new Int32Rect(0, 0, width, height), pixels, width*pf.BitsPerPixel/8, 0); 
} 

しかし、どのようなユーザーは、プロットに望んでいること(すなわちDrawBitmap<T>)タイプbyteのものであり、それは、この方法は、一般的な作るために理にかなっていることは確かではないですが、どのようにすることができます:重要な部分は、このようになりますポインタpPixelsT*にしますか?

私のDrawBitmapを一般的にする別のトリックはありますか?

+4

「一般」とは、実際にタイプパラメータとして使用しているものだけでなく、すべてのタイプに対して同じメソッド(同じIL)が機能することを意味します。異なる整数型(byte、int、...)は異なるILを必要とするため、メソッドを汎用化することはできません。 – dtb

+0

'pPixels'や' pixels'がどこから来ているのかよく分かりません。すべてのコードを投稿しますか? – LukeHennerley

+1

しかし、@dtbのように、単純に 'object'から派生する型が必要です。値の型は汎用メソッドでは使用できません。代わりにメソッドの異なるオーバーロードを使用することを検討します。 – LukeHennerley

答えて

3

overloadsを使用することを検討してください。

public void MethodA(byte[] pPixels) {} 
public void MethodA(int[] pPixels {} 
//etc... 
関連する問題