2016-07-21 58 views
1

我試圖用透明度設置爲「石灰」的'石灰'背景顏色對圓角使用背景圖像,它主要具有所需的效果,背景圖像,但石灰背景上的窗體控件不會從透明鍵取消了1px的周圍的圓邊:TransparencyKey在圓角背景圖像上留下像素

1px ring left on all 4 corners

有誰知道我怎樣才能防止這種情況的發生?

+1

嗯,是的,這不是石灰。消除鋸齒需要知道* real *背景顏色才能正常工作,而「TransparencyKey」只能使用單一顏色。 – Luaan

+1

您的圖形編輯器在像素中使用了alpha通道,使圖像看起來像樣的*任何背景色。反鋸齒否則只能在知道背景時才能很好地工作,所以它可以平滑地從前景到背景顏色進行插值。但是,當你使用透明鍵時,它當然不起作用,當alpha被應用時,它不再是石灰。每像素alpha混合不能在Winforms中工作,沒有更多的繪畫事件=死亡控件。你必須修復圖像。並想知道如果它沒有已知的背景顏色,它可能會*正常工作。它不能.. –

回答

2

TransparencyKey使用單一顏色。當您使用抗鋸齒繪製圓角時,線條顏色將與背景顏色混合在一起,所以您看到的顏色不完全是Lime,這是LimeGray的混合,以使圓角更加平滑。因此,當您將TransparencyKey設置爲Lime時,不會刪除顏色。

要獲得高質量的alpha混合圓角,請考慮使用Layered Windows。創建包含圓角矩形的平滑的描畫,然後使用該技術透明背景位圖,你可以找到在下面的帖子,讓你的形形式:

使用分層的窗口可以顯著提高具有複雜形狀的窗口的視覺效果,爲其形狀創造動畫效果,或希望使用alpha混合效果。系統 自動編寫並重新繪製分層窗口和底層應用程序的窗口。結果,分層窗口平滑地呈現,而沒有典型的複雜窗口區域的閃爍。在 另外,分層的窗口可以是部分半透明的,即,以α混合的 。

重要提示

了上述是創建一個簡單的開機畫面是有用的,但是當你要放置在窗體上的一些控制,你需要使用變通的方法。

除了主窗體,您還可以使用WS_EX_LAYERED樣式創建另一個窗口,並使用該窗口顯示alpha混合背景圖像。然後我們只需要確保這個窗口位於主窗體的後面。是的,這不是那麼容易,但是這裏是一個使得任務非常簡單的庫。由於安東尼Mushrow的思想和實現:

+0

感謝Reza,我已經給出了類PerPixelAlphaForm.cs,我的主窗體上有所有的表單元素(文本框等)繼承這個類,然後調用帶有背景圖像的SelectBitmap方法作爲參數(MyMainForm.SelectBitmap(Properties.Resources.rounded1);)。不幸的是,它使整個表單完全變白,但儘管如此,仍然可以使用所有控件,但是爲什麼會這樣呢? –

+0

是的,我知道,這就是我發佈** Note **部分的原因。 'PerPixelAlphaForm'對創建啓動畫面非常有用。但是如果你想在窗體上有一些控件,可以按照alpha透明窗體來定位透明背景的mainform。 –

+0

啊哈,謝謝,沒有看到更新...我會放棄這一點。 –