首先,這不是要使PictureBox控件透明。這是關於完全不透明的「畫布」上的位圖透明度。PictureBox上的圖形透明度
PictureBox將始終具有300 * 300的大小與白色背景。控制不需要透明度。
我需要的是將透明矩形(或其他任何東西)繪製到pictureBox上的方式,因此任何已經存在的東西都將被視爲「通過」矩形。
說我有一個下面的代碼
Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 100, 100);
pictureBox.Image = bmp;
這將在白色帆布中間畫一個紅色矩形。現在,我需要另一個(透明的)「圖層」上的圖片包含另一個矩形,但一個是透明的。
我可以嘗試
Brush brush = new SolidBrush(Color.FromArgb(128, 0, 80, 0));
g.FillRectangle(brush, 50, 50, 200, 200);
由於我使用的顏色通過指定其alpha = 128,得到的矩形應該是透明的,所以第一紅色矩形應該通過此其他綠色一個可見。
但是,這並不正確。我可以看到新的綠色矩形後面的紅色矩形,但綠色矩形的不與紅色矩形重疊的部分將保持完全不透明。但是,如果我將顏色的alpha值設置爲一個非常小的值(比如1-5),整個矩形將看起來透明。這在我看來是不正常的 - 5/255只有一半透明,128/255根本不透明...如果之前使用g.DrawString()繪製了一個字符串,則該字符串顯示在後面綠色矩形或不是,取決於透明度級別。例如,如果Alpha大於或等於(大約)40,則字符串根本不可見,並且如果它小於40,則它將顯示,對於較小的alpha值,對於alpha = 0,更明顯。
這個畫筆(從Argb顏色創建時)如何應用?我錯過了什麼嗎?對我來說,設置透明畫筆似乎使背景「更明顯」,而不是將對象設置爲「不可見」。
感謝您的任何建議答覆。
[編輯]看來我不得不在應用邏輯一個討厭的錯誤,所以繪圖程序發生在一個循環中,所以當我積累了一定數量透明的矩形,他們變得越來越厚。
從循環中取出的代碼正常工作。
我的不好。
他們只對重疊部分中的同樣的事情。 – 2010-01-13 10:37:30
您的解決方案和我的例子都可以。看起來我有一個循環錯誤。用字符串示例更新了 – 2010-01-13 10:38:03
。 – serhio 2010-01-13 10:41:22