/** * Extracts image pixels into byte array "pixels" */ protected async Task GetImagePixels(IRandomAccessStream iRandomAccessStream) { int w = (int)image.PixelWidth; int h = (int)image.PixelHeight; if ((w != width) || (h != height) ) { // create new image with right size/format //image.Resize(w, h, WriteableBitmapExtensions.Interpolation.Bilinear); //image = image.Resize(width, height, WriteableBitmapExtensions.Interpolation.NearestNeighbor); image = await WriteableBitmapExpansion.Resize(image, iRandomAccessStream, width, height); //Graphics g = Graphics.FromImage( temp ); //g.DrawImage(image, 0, 0); //image = temp; //g.Dispose(); } /* * ToDo: * improve performance: use unsafe code */ pixels = new Byte[3 * (int)image.PixelWidth * (int)image.PixelHeight]; int count = 0; //WriteableBitmap tempBitmap = new WriteableBitmap(image.PixelWidth, image.PixelHeight); //WriteableBitmap tempBitmap = image.Clone(); //WriteableBitmap tempBitmap = WriteableBitmapExpansion.CloneWriteableBitmap(image); WriteableBitmap tempBitmap = WriteableBitmapExpansion.CopyWriteableBitmap(image); byte[] tempByte = WriteableBitmapExpansion.WriteableBitmapToBytes(image); for (int th = 0; th < image.PixelHeight; th++) { for (int tw = 0; tw < image.PixelWidth; tw++) { //Color color = tempBitmap.GetPixel(tw, th); //Color color = WriteableBitmapExpansion.GetPixel(tempBitmap, tw, th); Color color = WriteableBitmapExpansion.GetPixel(tempByte, image.PixelWidth, tw, th); pixels[count] = color.R; count++; pixels[count] = color.G; count++; pixels[count] = color.B; count++; } } //pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); }
/** * Extracts image pixels into byte array "pixels" */ protected async Task GetImagePixels(IRandomAccessStream iRandomAccessStream) { Point pointWH = await WriteableBitmapExpansion.GetPixelWidthAndHeight(iRandomAccessStream); int w = (int)pointWH.X; int h = (int)pointWH.Y; int count = 0; byte[] tempByte = null; if ((w != width) || (h != height) ) { var bytes = await WriteableBitmapExpansion.ResizeBytes(iRandomAccessStream, width, height, BitmapInterpolationMode.Cubic); //imageIAStream = await WriteableBitmapExpansion.ConvertBytesToIRandomAccessStream(bytes); pixels = new Byte[3 * width * height]; pointWH = new Point(width, height); tempByte = bytes; } else { pointWH = await WriteableBitmapExpansion.GetPixelWidthAndHeight(imageIAStream); pixels = new Byte[3 * (int)pointWH.X * (int)pointWH.Y]; tempByte = await WriteableBitmapExpansion.WriteableBitmapToBytes(imageIAStream); } for (int th = 0; th < pointWH.Y; th++) { for (int tw = 0; tw < pointWH.X; tw++) { Color color = WriteableBitmapExpansion.GetPixel(tempByte, Convert.ToInt32(pointWH.X), tw, th); pixels[count] = color.R; count++; pixels[count] = color.G; count++; pixels[count] = color.B; count++; } } }