首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >灰度PictureDrawable

灰度PictureDrawable
EN

Stack Overflow用户
提问于 2012-05-27 09:16:26
回答 2查看 574关注 0票数 2

要对可绘制的图形进行灰度化处理,我会执行以下操作:

代码语言:javascript
复制
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
drawable.setColorFilter(filter);

作为Justin said。它工作得很好。

我正在使用svg-android库。所以我试着:

代码语言:javascript
复制
PictureDrawable pictureDrawable = svg.createPictureDrawable();
ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(200);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
pictureDrawable.setColorFilter(filter);
imageView.setImageDrawable(pictureDrawable);

但是什么都没发生。怎么啦?

EN

回答 2

Stack Overflow用户

发布于 2012-12-01 11:59:37

恐怕我在Android源代码中找到了原因:

Drawable.java

代码语言:javascript
复制
public abstract void setColorFilter(ColorFilter cf);

PictureDrawable.java

代码语言:javascript
复制
@Override
public void setColorFilter(ColorFilter colorFilter) {}

简单地说,任何对setColorFilter的调用对于PictureDrawable都是无用的。

票数 3
EN

Stack Overflow用户

发布于 2013-07-18 00:49:25

我是通过谷歌搜索找到这个页面的。如果任何人仍然感兴趣,我正在使用一些解决方法来解决相同的问题:

代码语言:javascript
复制
Picture pic = svg.getPicture();
Bitmap bm = Bitmap.createBitmap(pic.getWidth(), pic.getHeight(), Bitmap.Config.ARGB_4444);
Canvas c = new Canvas(bm);
c.drawPicture(pic, new Rect(0,0,pic.getWidth(), pic.getHeight()));
c.save();
BitmapDrawable drawable = new BitmapDrawable(getResources(), bm);
drawable.setColorFilter(getBlackAndWhiteFilter());
imageView.setImageDrawable(drawable);

当然,您可以不使用pic.getWidth()和pic.getWidth(),而是使用您喜欢的图像大小-这样位图就不会被绘制得太大,因为这可能会牺牲一些性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10770976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档