Jak obliczyć wymagany rozmiar bufora dla metody WriteableBitmap.WritePixels?Obliczanie wymaganego rozmiaru bufora dla metody WriteableBitmap.WritePixels
Używam przeciążenia przyjmującego cztery parametry, pierwszy to Int32Rect, następny to tablica bajtów zawierająca liczby RGBA dla koloru, trzecia to krok (który jest szerokość mojej zapisywalnej mapy bitowej pomnożonej przez bity na piksel podzielone przez 8), a ostatni to bufor (określany jako przesunięcie w Intellisense).
Dostaję rozmiar bufora nie jest wystarczający błąd wykonawcze w poniższym kodzie:
byte[] colourData = { 0, 0, 0, 0 };
var xCoordinate = 1;
var yCoordinate = 1;
var width = 2;
var height = 2;
var rect = new Int32Rect(xCoordinate, yCoordinate, width, height);
var writeableBitmap = new WriteableBitmap(MyImage.Source as BitmapSource);
var stride = width*writeableBitmap.Format.BitsPerPixel/8;
writeableBitmap.WritePixels(rect, colourData, stride,0);
Jaka jest formuła muszę użyć do obliczenia wartości bufora potrzebnego w powyższym kodzie?
Kiedy mówisz RGBA, na pewno mają 32 bity na piksel. To sprawia, że 4 bajty na piksel. W 2x2 rect całkowity to 16 bajtów (4 piksele * 4 bajty/piksel). Twoja 'coulorData' jest oczywiście za mała. – Clemens
@Clemens Czy masz na myśli mój krok jest za mały? Jeśli nie, to możesz wyjaśnić, jak colorData jest za mała, czego nie rozumiem. Thankyou – JMK
Stride to po prostu liczba bajtów na linię w buforze. Masz 4 bajty na piksel przy 2 pikselach na linię (tj. Szerokość prostokąta zapisu), co skutkuje krokiem 8. – Clemens