2011-02-24 83 views

回答

8

這是轉換的一種方式,所以讓我們從這裏開始,看看是否有人能夠頂到這個駭人聽聞的裝置。它們很好地映射到彼此,所以編寫開關盒應該相當容易。

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

謝謝。我最終做了這樣的事情。確保所有類似命名的格式實際上完全等價是很棘手的。 – Jem 2013-01-10 10:32:08

+0

'System.Drawing.Imaging.PixelFormat.Format16bppArgb1555'似乎沒有相同的東西,如果我沒有遺漏什麼。但無論如何,這種格式似乎相當模糊(每個5位RGB + 1位阿爾法)。 – 2018-01-24 09:07:37

+0

如果有些不支持,也許返回值應該是一個可選/可空。如果沒有找到相應的格式,調用者將不得不決定是否拋出或做其他事情。 – 2018-01-25 11:48:13

-2

的話題很老,但我這是怎麼工作圍繞這一問題,這兩個枚舉都相同的字符串值的假設下工作。

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

我不相信這是真的,因爲System.Windows.Media.PixelFormat是一個結構,而不是一個枚舉。 – Veggie 2015-10-29 19:20:11

+0

這是絕對錯誤的。這段代碼所做的唯一事情就是獲取Imaging-PixelFormat枚舉對象的**名稱**,並嘗試直接將Enum-解析爲Media-PixelFormat類型,這是不可能的:Enum-Parse將不起作用,因爲在第一個參數中傳入的類型不是枚舉類型。如果這可以以任何方式工作,它可能只有其他方式,從媒體(結構)到Imaginig(枚舉)。但即使如此,Imaging-PixelFormat名稱就像''Format32bppArbg''',而Media-PixelFormat名稱就像''Bgra32''所以**所提供的轉換絕不可能**。 – quetzalcoatl 2016-08-10 12:23:13