2011-09-13 21 views
6

Estoy trabajando con Winforms, CAB, C# y Infragistics. Estoy tratando de trabajar con MVP con mi backend conectado con WCF.Enlace de datos en la imagen pero necesito un byteArray

En mi presentador tengo mi modelo, llamémosle AgreementDataContract. Este contrato de datos tiene un conjunto de atributos:

... 
    [DataMember] 
    public byte[] PVImage { get; set; } 

    [DataMember] 
    public byte[] OntwerpImage { get; set; } 

    [DataMember] 
    public Decimal WattpiekPrijs { get; set; } 
    ... 

Notará que la Imagen se almacena como un byte []. Ato estos atributos a los controles de mi control de usuario:

BindingHelper.BindField(_ultraPictureBoxPV, "Image", _bindingSource, "PVImage"); 
    BindingHelper.BindField(_ultraPictureBoxOntwerp, "Image", _bindingSource, "OntwerpImage"); 

BindingHelper sólo se suma un BindingContext a la Controler especificado (control.BindingContext.Add (...)).

De todos modos, el problema: el contrato de datos contiene la imagen como bytearray, por lo que estoy vinculando a una imagen. Esto hace que el atributo de permanecer "nulo", debido a que no se siente como poner una imagen en un bytearray;)

He tratado de jugar un rato con él, pero creo que tengo 2 posibilidades:

  1. Puedo intentar usar un tipo de convertidor? Entonces, cuando se inserta una imagen, se pasa como un array de bytes en lugar de una imagen para el modelo (= enlace de datos).

  2. Puedo soltar el enlace y hacer un evento cuando el formulario es "enviado" y convertir la imagen a byteArray y rellenar el modelo. (= sin enlace de datos)

TL; DR; ¿Conoces una forma de "convertir" una imagen en una imagen de byte cuando se está pasando al enlace de datos?

¡Espero que mi pregunta esté clara! Gracias por la ayuda

Respuesta

3

Agregaría una nueva propiedad de tipo Imagen que será enlazable a su control UltraPictureBox. Agregue dos métodos que saben cómo convertir en cualquier dirección.

[DataMember] 
public Image OntwerpImageImage 
{ 
    get { return ConvertByteArrayToImage(OntwerpImage); } 
    set { OntwerpImage = ConvertImageToByteArray(value); } 
} 

//[DataMember] 
public byte[] OntwerpImage { get; set; } 

public Image ConvertByteArrayToImage(Byte[] bytes) 
{ 
    var memoryStream = new MemoryStream(bytes); 
    var returnImage = Image.FromStream(memoryStream); 
    return returnImage; 
} 

public Byte[] ConvertImageToByteArray(Image image) 
{ 
    var memoryStream = new MemoryStream(); 
    image.Save(memoryStream, ImageFormat.Jpeg); 
    return memoryStream.ToArray(); 
} 
+0

¡Gracias, lo intentaré mañana! –