none
sacar arreglo de bytes de campo tipo Image para despues guardarlo en base de datos RRS feed

  • Pregunta

  • que tal amigos de nuevo molestando, el problema que tengo es que no se como sacar el arreglo de bytes de una campo tipo Image, la imagen la traje desde un OpenFileDialog y la muestro perfectamente en el Image, pero ahora lo que quiero es que el Source de la Image la quiero convertir a bytes para de esta manera poder guardar la imagen, ojala pudieran ayudarme, gracias de antemano
    • Cambiado webJose domingo, 2 de diciembre de 2012 19:10 (De:Lenguaje C#)
    sábado, 1 de diciembre de 2012 5:31

Todas las respuestas

  • hola

    lo que quieres es de un Image poder insertarlo en la db? si es asi en este ejemplo lo implemento

    [WinForms] Edición Empleados

    analiz como uso los metodos para convertit desde image a byte[] y  al contrario para asignar nuevamente al picturebox

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    sábado, 1 de diciembre de 2012 5:59
  • Gracias por contestar Leandro, el ejemplo que pones esta realmente fabuloso, el unico problema que tengo es que en WPF el componente Image no contiene una propiedad Image sino Source, entonces e aqui mi problema que no puedo convertir el Source en Imagen, como le podre hacer para sacar la imagen del compoente y ahora si convertirla en Bytes
    domingo, 2 de diciembre de 2012 5:24
  • es que en realidad deberias convertir de source a byte array

    WPF Image to byte[]

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 2 de diciembre de 2012 5:37
  •        

    Hace ya tiempo encontré esta solución, no recuerdo en donde pero me ha sido muy útil para ese caso, de guardar imágenes en DB

            public Byte[] ImageToByteArray(ImageSource value)
            {
                var image = (BitmapSource)value;
                BitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(image));
                using (var ms = new MemoryStream())
                {
                    encoder.Save(ms);
                    return ms.ToArray();
                }
            }

    para recuperar la imagen se puede con:

            BitmapImage imageFromByte(byte[] value)
            {
                var bytes = (byte[])value;
                var image = new BitmapImage();
                image.BeginInit();
                if (bytes == null) 
                {
                    // Processing null case
                }
                else
                {
                    using (var ms = new MemoryStream(bytes))
                    {
                        image.CacheOption = BitmapCacheOption.OnLoad;
                        image.StreamSource = ms;
    
                        image.EndInit();
                    }
                }      
                return image;
            }


    • Propuesto como respuesta Pacho-B jueves, 6 de diciembre de 2012 14:26
    miércoles, 5 de diciembre de 2012 21:41
  • Hola Leandro:

    Yo tengo exactamente el mismo problema pero usando WPF donde tengo un campo Foto tipo Image (SQL Server).

    Las fotos las cargo perfectamente usando:

            private void BtnCargarFoto_Click(object sender, RoutedEventArgs e)
            {
                OpenFileDialog OD = new OpenFileDialog();
                OD.Filter = "jpg(*.jpg)|*.jpg|png(*.png)|*.png|gif(*.gif)|*.gif|bmp(*.bmp)|*.bmp|All Files(*.*)|*.*";
                if (OD.ShowDialog() == true)
                {
                    using (Stream stream = OD.OpenFile())
                    {
                        bitCoder = BitmapDecoder.Create(stream, BitmapCreateOptions.PreservePixelFormat,
                            BitmapCacheOption.OnLoad);
                        ImgFoto.Source = bitCoder.Frames[0];
                    }
                    System.IO.FileStream fs = new System.IO.FileStream(OD.FileName, System.IO.FileMode.Open);
                    foto = new byte[Convert.ToInt32(fs.Length.ToString())];
                    fs.Read(foto, 0, foto.Length);
                }
            }

    XAML:

                <Image x:Name="ImgFoto" Source="{Binding Foto}" Stretch="Fill"  HorizontalAlignment="Left" Height="181"
                       Margin="243,371,0,0" VerticalAlignment="Top" Width="250" Grid.ColumnSpan="2"/>


    Mi problema está en que no puedo convertir el ImgFoto.Source en un byte[] para poder grabarlo en la tabla (campo Foto)

    Esto lo necesito para Editar registros. Por ejemplo, cuando quiero modificar sólo el nombre o direccion PERO no la imagen existente, debo obtener  ImgFoto.Source como byte[] para luego grabarla tal cual en con el método Grabar.

    Gracias de antemano.


    Mario Escudero www.cheff2000.com Lima, Perú




    • Editado MarioSharp sábado, 25 de octubre de 2014 15:55
    viernes, 24 de octubre de 2014 21:23
  • Por favor, alguien que me pueda ayudar con esto ?????

    Gracias


    Mario Escudero www.cheff2000.com Lima, Perú


    • Editado MarioSharp sábado, 25 de octubre de 2014 15:55
    sábado, 25 de octubre de 2014 15:55
  • Excelente Pacho !!!

    Fue lo mejor que encontré para convertir un Image.Source a byte[]

    Gracias !


    Mario Escudero www.cheff2000.com Lima, Perú

    sábado, 25 de octubre de 2014 18:30