2011-02-24 5 views

Respuesta

8

Esto es una manera de la conversión, así que vamos a empezar aquí y ver si alguien puede superar este artilugio horrendeous. Se mapean bien entre sí, por lo que escribir las casillas de cambio debería ser bastante fácil.

private static System.Windows.Media.PixelFormat ConvertPixelFormat(System.Drawing.Imaging.PixelFormat sourceFormat) 
{ 
    switch (sourceFormat) 
    { 
     case System.Drawing.Imaging.PixelFormat.Format24bppRgb: 
      return PixelFormats.Bgr24; 

     case System.Drawing.Imaging.PixelFormat.Format32bppArgb: 
      return PixelFormats.Bgra32; 

     case System.Drawing.Imaging.PixelFormat.Format32bppRgb: 
      return PixelFormats.Bgr32; 

     // .. as many as you need... 
    } 
    return new System.Windows.Media.PixelFormat(); 
} 
+0

Thanks. Terminé haciendo algo así. Es complicado asegurarse de que todos los formatos con nombres similares sean realmente equivalentes. – Jem

+0

'System.Drawing.Imaging.PixelFormat.Format16bppArgb1555' no parece tener un equivalente si no he omitido algo. Pero ese formato parece bastante oscuro de todos modos (5 bits RGB cada uno + 1 bit alfa). –

+0

Si algunos no son compatibles, quizás el valor devuelto sea opcional/nulable. La persona que llama debería decidir si lanzar o hacer otra cosa si no se encuentra el formato correspondiente. –

-2

El tema es muy antiguo, pero así es como trabajé alrededor de este problema, trabajando bajo el supuesto de que ambas enumeraciones tienen todos los mismos valores de Cadena.

private static System.Windows.Media.PixelFormat ConvertPixelFormat (System.Drawing.Imaging.PixelFormat sourceFormat) { System.Windows.Media.PixelFormat pixelFormat = (System.Windows.Media.PixelFormat) Enum.Parse(typeof(System.Windows.Media.PixelFormat), sourceFormat.ToString());
return pixelFormat; }

+0

No creo que esto sea cierto, ya que System.Windows.Media.PixelFormat es una estructura, no una enumeración. – Veggie

+0

Esto es absolutamente incorrecto. Lo único que hace este código es tomar el ** nombre ** del objeto enum de Imaging-PixelFormat e intentará directamente Enum-Parse como un tipo de Media-PixelFormat, esto es imposible: Enum-Parse no funcionará, porque el El tipo pasado en el primer argumento no es un tipo enum. Si eso pudiera funcionar de alguna manera, podría haber funcionado solo al revés, desde Media (struct) hasta Imaginig (enum). Pero, aun así, el nombre de Imaging-PixelFormat es como '" Format32bppArbg "' y el nombre de Media-PixelFormat es como '" Bgra32 "' por lo que ** una conversión como la presentada no es de ninguna manera posible **. – quetzalcoatl

Cuestiones relacionadas