none
WriteableBitmap to byte[] RRS feed

  • Pregunta

  • Hola estoy trabajando con silverlight 4 capturo desde webcam y con un videobrush asigno los datos a un rectagle en el mometo de capturar la foto lo guardo a un WriteableBitmap y este a su vez lo tengo q guarda en bd como byte[], el problema esta en que para convertilo a byte[] uso la siguiente funcion

     

     private byte[] ToByteArray(WriteableBitmap bmp) {
                int[] p = bmp.Pixels;
                int len = p.Length * 4;
                byte[] result = new byte[len]; // ARGB
                Buffer.BlockCopy(p, 0, result, 0, len);
                return result;
            }

    si me genera un arreglo de bytes pero cuando, se consulta ese registro me genera un error: Catastrophic failure (Excepción de HRESULT: 0x8000FFFF (E_UNEXPECTED))
    la funcion con la que realizo la carga funciona adecuadamente cuando leer los registros que guardaron una imagen desde un archivo y se convirtio a byte[], me podrian indicar por favor si estoy realizando mal la conversion a byte[].
    de antemano gracias

    viernes, 20 de mayo de 2011 18:27

Respuestas

  • Gracias de todos modos ya lo pude resolver queda de la siguiente forma
     private byte[] ToByteArray(WriteableBitmap wb) {
                            int width = wb.PixelWidth;
                int height = wb.PixelHeight;
                int bands = 3;
                byte[][,] raster = new byte[bands][,];
     
                for (int ii = 0; ii < bands; ii++) {
                    raster[ii] = new byte[width, height];
                }
     
                for (int row = 0; row < height; row++) {
                    for (int column = 0; column < width; column++) {
                        int pixel = wb.Pixels[width * row + column];
                        raster[0][column, row] = (byte)(pixel >> 16);
                        raster[1][column, row] = (byte)(pixel >> 8);
                        raster[2][column, row] = (byte)pixel;
                    }
                }
     
     
                FluxJpeg.Core.ColorModel model = new FluxJpeg.Core.ColorModel { colorspace = FluxJpeg.Core.ColorSpace.RGB };
                FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
                MemoryStream stream = new MemoryStream();
                FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 90, stream);
                encoder.Encode();
     
                stream.Seek(0, SeekOrigin.Begin);
                byte[] binaryData = new Byte[stream.Length];
                 stream.Read(binaryData, 0, (int)stream.Length);
                 stream.Close();
                 return binaryData;
                
            }
    

    requiere del uso de FJ.Core.dll 
    • Marcado como respuesta Adrian Fdr viernes, 20 de mayo de 2011 19:57
    viernes, 20 de mayo de 2011 19:57