2008-08-18 82 views
2

在全.NET框架可以使用Color.FromArgb()方法來創建新的顏色與α混合,像這樣:Alpha混合顏色在.NET Framework精簡2.0

Color blended = Color.FromArgb(alpha, color); 

Color blended = Color.FromArgb(alpha, red, green , blue); 

但是在緊湊型框架(特別是2.0),無論這些方法都可以,你只能得到:

Color.FromArgb(int red, int green, int blue); 

Color.FromArgb(int val); 

第一個,很明顯,甚至沒有讓你輸入一個Alpha值,但後者顯示的文件是「VAL」爲32位ARGB值(0xAARRGGBB而不是標準24位0xRRGGBB),因此您可以創建ARGB值並將其傳遞給函數。我想這與以下:

private Color FromARGB(byte alpha, byte red, byte green, byte blue) 
{ 
    int val = (alpha << 24) | (red << 16) | (green << 8) | blue; 
    return Color.FromArgb(val); 
} 

但無論我做什麼,alpha混合永遠不會奏效,所產生的顏色總是以完全不透明,阿爾法值設置爲0

即使有沒有人得到這個在Compact Framework上工作?

回答

1

顯然,這不是那麼簡單,但still possible,如果你的Windows Mobile 5.0或更高版本。

0

顯然,這不是想象中的那麼簡單 ,但還是可以的,如果你有 的Windows Mobile 5.0或更高版本。

哇...絕對不值得,如果我必須把所有的代碼(做本地互操作!) 好的,但要知道,感謝您的鏈接。

0

有一個codeplex site在那裏,似乎做COM互操作的繁重的你:

0

我借這個代碼,我在初始化程序添加此

device.RenderState.AlphaBlendEnable = true; 
device.RenderState.AlphaFunction = Compare.Greater; 
device.RenderState.AlphaTestEnable = true; 
device.RenderState.DestinationBlend = Blend.InvSourceAlpha; 
device.RenderState.SourceBlend = Blend.SourceAlpha; 
device.RenderState.DiffuseMaterialSource = ColorSource.Material; 

,並很努力好,謝謝

0

CE 6.0不支持Alpha混合。 WM 5.0及以上版本,但不是通過.NET CF,你需要P/Invoke GDI才能做到這一點。現在有了現成的解決方案,但是,如果您有興趣,我可以明天在辦公室挖掘鏈接。我現在必須和CE 6.0一起工作,所以我沒有想到他們。

如果您正在使用CE 6.0,你可以先預留一個透明背景顏色使用僞透明(例如FF00FF什麼similiarly醜陋的),並使用該圖像中的透明區域。然後,您的父級控件必須實現一個簡單的界面,允許在女兒控件的圖形緩衝區中重新繪製相關部分。請注意,這不會給你一個真正的「alpha通道」,而只是一個硬開關的二進制透明。

它並不像聽起來那麼糟糕。看看OpenNETCF ImageButton的初學者。如果你打算使用這種方法,我有一些簡單的控制的擴展版本,如果你有興趣,這種技術可以放在周圍。

另一個缺點是,這種技術依賴於父控件實現一個特殊的接口,並且daugther控件在繪圖中使用它。因此,對於閉源組件(即庫存winforms組件),您運氣不佳。

+1

CE 6.0 *確實*支持alpha混合。可能是您的特定操作系統版本不支持,但支持在操作系統中,並且可以包含在操作系統映像中。 – ctacke 2012-06-19 02:35:13