【问题标题】:dimming the alpha value of a pixel android使像素android的alpha值变暗
【发布时间】:2011-05-08 13:01:04
【问题描述】:

我正在尝试使位图中单个像素的 Alpha 通道变暗。我想保持像素颜色 rgb 但只是使像素半透明。我查看了 Color 类并尝试了 Color.argb(int,int,int,int) 方法,但效果不佳。如何在保持像素原始 rgb 的同时设置像素的 alpha?

提前感谢垫子。

[编辑] 大声笑水龟:)。嗨,下面是我如何配置我的位图。如果这就是你的意思,我没有潜在的形象。我要做的基本上是使某些像素半透明。我有一个位图并在位图上放置了一个圆圈。我的算法只针对圆圈内的像素,我可以将这些像素更改为粉红色。我想要的是检查圆圈中的每个像素并使其半透明,如果有意义的话,仍然保持原始像素颜色的一半:)

 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);

【问题讨论】:

    标签: android colors bitmap pixel-manipulation


    【解决方案1】:

    问候水龟。您的代码 sn-p 看起来不错。我脑子里只有两个想法。
    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 是一个充满象形文字的位图,通过我的“幽灵”精灵显示(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

    【讨论】:

    • freeman 嗯,现在我很困惑:) 我不想通过覆盖显示另一个位图,这就是你所描述的......我想。是否可以仅淡化像素的颜色使其看起来有点半透明?对不起,如果我错过了你的意思
    • freeman 好的,我明白你的意思,感谢您的解释。我会尝试 Photoshop 的想法。
    • @turtleboy 祝你好运。 Stack Overflow 社区总是乐于帮助龟类生命形式。
    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 2014-12-17
    • 2010-11-05
    • 1970-01-01
    • 2014-07-16
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多