Een System.Drawing.Image converteren naar byte[] is voor een leek nog een fluitje van een cent. Dit kan je simpelweg met een MemoryStream doen.
Een BitmapImage converteren is helaas iets anders.
Je kan het doen met de method CopyPixels() waarbij je dan de bestemde Array, de stride en de offset meegeeft.
Toen ik dat las dacht ik "ok, die array en offset lukt nog wel, maar wat is die stride?". Na lang zoeken heb ik dan een mooie definitie gevonden: "De stride is het aantal bytes dat nodig is om van het begin van een rij naar het begin van de volgende rij te gaan."
Dit zegt waarschijnlijk niet erg veel, want nu weet je nog altijd niet hoe je aan de stride van die bitmap kunt geraken. Hier bestaan formules voor :
BitmapImage img = new BitmapImage(new Uri("path naar uwe image"));
int pixelCount = img.PixelWidth * img.PixelHeight;
int bytesPerPixel = img.Format.BitsPerPixel / 8;
int byteCount = pixelCount * bytesPerPixel;
int stride = img.PixelWidth * bytesPerPixel;
de stride is dus gelijk aan de breedte van je image * het aantal bytes per pixel
om vervolgens img in een byte[] te steken:
byte[] data = new byte[byteCount];
img.CopyPixels(data, stride, 0);
(de offset mag en kan je in de meeste gevallen altijd van 0 laten beginnen)
img.CopyPixels(data, stride, 0) gaat ervoor zorgen dat img geconverteerd wordt naar een byte[], namelijk onze array data.
Hopelijk helpt dit een beetje.
0 reacties:
Een reactie plaatsen