コード例 #1
0
        /**
         * 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();
        }
コード例 #2
0
        /**
         * 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++;
                }
            }
        }