我正在尝试调暗位图中单个像素的Alpha通道。我想保持像素颜色rgb,但只是让像素半透明。我看过Color类并尝试了Color.argb(int,int,int,int)方法,但没有好处。我怎样才能设置像素的alpha值同时保持像素的原始rgb?
先谢谢你。
[编辑] lol terrapin :)。嗨,下面是我如何配置我的位图。如果这就是你的意思我没有潜在的形象。我想要做的是基本上使某些像素半透明。我有一个位图,并在位图上放置了一个圆圈。我有一个算法,只针对圆圈内的像素,我可以将这些像素改为粉红色。我想要的是检查圆圈中的每个像素并使其透明,仍然保持原始像素颜色的一半,如果这是有道理的:)
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);
答案 0 :(得分:2)
问候水龟。您的代码段看起来正确。只有两个想法在我的头顶 1)您确定您的位图是ARGB_8888格式吗?默认情况下,您可能会获得另一种格式,具体取决于具体情况 2)Alpha值是绝对的(不是百分比),所以我认为你希望第一个参数是127而不是50。
编辑:此外,嗯,当你减少alpha时,你必须确保你在一个有效显示的背景上绘图。如果我已解决您的问题或者您需要更多帮助(或许我们需要查看更多代码),请与我们联系。
编辑:我认为问题在于你没有背景。如果你减少alpha并且你在黑色上绘图,它只会让事情看起来更暗。换句话说(127,255,255,255)与(255,127,127,127)相当。我是一个活着的壁纸,所以我总是和画布一起工作。这是我做的事情:
c.drawBitmap(sBG,0,0,null);
c.drawBitmap(sSprite,mWidth / 2,mHeight / 2,null);
sBG是一个充满了heiroglyphics的位图,通过我的“幽灵”精灵显示(sSprite有alpha~127)。
我只是将位图覆盖在画布上,当我渲染画布时,它一切都很好。 : - )
编辑:减少alpha通常用于让一些东西从后面显示出来。我认为您需要通过“淡化颜色以使其看起来有点半透明”来确定您的意思(数学上)。例如,将红色变成粉红色意味着混合成白色;这相当于具有白色背景的半透明(白色混合是如何将饱和色彩变为粉彩)。我建议玩GIMP或Photoshop(可以调整图层alpha)以确定最能满足您需求的效果,然后尝试在Android中复制它。
编辑:我认为可能会“鼓励”你提到这些是棘手的,希望你正在努力解决的有趣事情。在计算机图形学中,有时我们必须做一些不一定直观的事情来达到预期的效果。我认为令人信服的半透明性是非平凡的......需要使用背景物体,灯光和/或动画。我对这个具体效果了解不多,但这里有一个你可能喜欢的链接:http://www.neilblevins.com/cg_education/translucency/translucency.htm
我知道的一点是创建金属纹理。诀窍在于:你几乎总是要使用反射。这个YouTube视频是一个很好的演示:http://www.youtube.com/watch?v=k6ZiRNkbWPw
真正参与其中的人甚至选择了HDRi!例如。在这里查看反射球体:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/HDRi