2011-05-08 50 views
0

我試圖調暗位圖中各個像素的alpha通道。我想保持像素顏色rgb,但只是使像素半透明。我看了Color類並嘗試了Color.argb(int,int,int,int)方法,但沒有用。我怎麼才能設置像素的alpha,同時保持像素的原始rgb?調暗一個像素的alpha值android

在此先感謝墊。

lol terrapin :)。嗨,下面是我如何配置我的位圖。如果這就是你的意思,我沒有底層的形象。我想要做的是基本上使某些像素半透明。我有一個位圖,並在位圖上放置了一個圓。我的算法只適用於圓內的像素,我可以將這些像素改爲粉紅色。我想是檢查每個像素中圈,並使其SMI透明,仍然保持原來的像素顏色的一半,如果是有道理的:)

bgr.setPixel(i,y,Color.argb(50,255,255,255)); 

[編輯]

BitmapFactory.Options bfo = new BitmapFactory.Options(); 
     bfo.inSampleSize = 1; 

     bm = BitmapFactory.decodeByteArray(imageArray, 0, imageArray.length, bfo); 
     bgr = Bitmap.createBitmap(bm.getWidth(), bm.getHeight(), bm.getConfig()); 
     bgr = bm.copy(bm.getConfig(), true); 

回答

2

問候龜。你的代碼片段看起來不錯。只是兩個想法,我的頭頂。
1)你確定你的位圖是ARGB_8888格式嗎?根據具體情況,您可能會默認獲得另一種格式。
2)阿爾法值是絕對的(不是百分比),所以我想你想的第一個參數是127,而不是50

編輯:還有,嗯,如果減少了阿爾法,你必須確保你在一個有效的背景下繪製背景。如果我解決了您的問題,或者您需要更多幫助,請告訴我們(也許我們需要查看更多代碼)。

編輯:我認爲問題是你沒有背景。如果你減少阿爾法,並且你在黑色之上繪畫,它會讓事情看起來更暗。換句話說(127,255,255,255)與(255,127,127,127)相當。我是一個活壁紙的人,所以我一直在使用畫布。這裏是我的工作方式:
c.drawBitmap(sBG,0,0,null);
c.drawBitmap(sSprite,mWidth/2,mHeight/2,null);
sBG是一個位圖,充滿了通過我的「幽靈般的」精靈(sSprite具有alpha〜127)的heiroglyphics。
我只是疊加在畫布上的位圖,當我渲染畫布時,這一切都很好。 :-)

編輯:減少alpha通常用於讓某些東西從後面顯示出來。我認爲你需要通過「淡化顏色使其看起來有點半透明」來確定你的意思(數學)。「例如,將紅色變成粉紅色意味着以白色混合;這相當於具有白色背景的半透明效果(以白色混合是您如何將飽和色彩變爲柔和色彩)。我建議玩GIMP或Photoshop(可以調整圖層alpha)來確定哪種效果最能滿足您的需求,然後嘗試在Android中進行復制。

編輯:我認爲這可能會「鼓勵」你提到這些是棘手的,希望你正在努力的有趣的事情。在計算機圖形學中,有時我們必須做一些不一定直觀的事情來達到預期的效果。我會說,說服半透明是非平凡的......需要使用背景對象,照明和/或動畫。我對這種特殊效果不太瞭解,但這裏有一個你可能喜歡的鏈接:​​
我知道的一點是創建金屬質感。這裏有個訣竅:你幾乎總是需要使用反射。這YouTube視頻是一個很好的演示:http://www.youtube.com/watch?v=k6ZiRNkbWPw
真正的人甚至選擇HDRi!例如。看看這裏的反射球:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/HDRi

+0

freeman更新後 – turtleboy 2011-05-08 17:05:19

+0

freeman嗯現在我很困惑:)我不想透露覆蓋,這是你所描述的....我認爲另一個位圖。是否有可能淡化像素的顏色,使其看起來有點半透明?對不起,如果我錯過了你的觀點 – turtleboy 2011-05-08 18:33:07

+0

弗里曼好吧,我明白你的意思,謝謝你的解釋。我會嘗試Photoshop的想法。 – turtleboy 2011-05-08 19:17:53