2013-02-19 12 views
5

Mam WriteableBitmap, którego używam jako niebezpieczną metodę do wykreślania pikseli. Zasadniczą część wygląda następująco:Jak utworzyć wskaźnik w języku 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); 
} 

jednak nie jest pewne, że to, co użytkownik chce działka jest typu byte, i byłoby sensu, aby ten sposób rodzajowy (tj DrawBitmap<T>), ale w jaki sposób Tworzę wskaźnik pPixels typu T*?

Czy istnieje inna sztuczka, która sprawi, że mój DrawBitmap stanie się ogólny?

+4

„Generic” oznacza, że ​​ta sama metoda (ta sama IL) pracuje dla * wszystkich * typów, a nie tylko te, które jest rzeczywiście używany jako parametr typu. Różne typy liczb całkowitych (bajt, int, ...) wymagają różnych IL, więc nie można uczynić tej metody ogólną. – dtb

+0

Nie bardzo wiem, skąd pochodzi 'pPixels' lub' pixels'? Opublikuj cały kod? – LukeHennerley

+1

Ale jak mówi @dtb, potrzebujesz typu, który w prostych terminach pochodzi od 'object', typów wartości nie można używać w metodach ogólnych. Zamiast tego rozważam użycie różnych przeciążeń metody. – LukeHennerley

Odpowiedz

3

Rozważ użycie overloads.

public void MethodA(byte[] pPixels) {} 
public void MethodA(int[] pPixels {} 
//etc... 
Powiązane problemy