在Android(1.5)工作,我有一百个左右的字节数组形式的灰度图像。我想使用图像作为alpha遮罩在Canvas中绘制纯色。图像是固定的,但颜色可以改变。我可以为每个图像/颜色组合创建位图对象,但这看起来非常低效。从内存和速度两方面来看,解决这个问题的好方法是什么? (我需要为每个图像/颜色组合做了很多次。)如何alpha遮罩颜色
4
A
回答
4
我想我发现我一直在寻找的答案:
- 创建ARGB_8888位图,其中每个像素的颜色设置为(灰色< < 24)| 0XFFFFFF。
- 对于每种颜色,创建一个新的PorterDuffColorFilter(color,PorterDuff.Mode.MULTIPLY)。
- 要进行渲染,请创建一个Paint对象,并使用与要使用的颜色对应的滤镜调用setColorFilter()。然后使用Bitmap和Paint对象调用canvas.drawBitmap。
对于单一颜色,这可能不像构建我想要的位图和绘制没有Paint对象那样快,但它比每个图像/颜色组合的位图更具空间效率。
0
我会用drawImage
的图像BitBlt到画布,getImageData()
访问像素,然后在图像数据的.data
环,设置将每个像素的RGB值转换为您的常量,并将第四个(alpha)值与您从图像中获得的值进行比较。然后你可以将这个半透明的画布铺在你需要的任何地方。
编辑:我已将a working example这个放在我的网站上。只适用于Chrome/Safari。
1
float contrast = 100/180.f; float scale = contrast + 1.f;
cm.set(new float[] {
scale, 0, 0, 0, 0,//Red
0, 1.5f, 0, 0, 0,//Green
0, 0, 1.5f, 0, 0,//Blue
0, 0, 0, 1, 0 });//alpha
bmpGrayscale = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bitmap, 0, 0, paint);
/*BitmapDrawable bmd = new BitmapDrawable(bmpGrayscale);
photo_view.setBackgroundDrawable(bmd);*/
photo_view.setImageBitmap(bmpGrayscale);
相关问题
- 1. 遮罩颜色android
- 2. Actionscript3 alpha遮罩?
- 3. 如何alpha遮罩SKSpriteNode?
- 4. 如何添加遮罩层,以遮罩特定颜色
- 5. 的DirectX Alpha遮罩
- 6. Alpha遮罩在c#System.Drawing?
- 7. 从颜色创建遮罩在C++中创建遮罩(叠加彩色图像遮罩)
- 8. Android位图遮罩颜色,移除颜色
- 9. 在QWidget上使用alpha透明遮罩?
- 10. 如何在iOS中用颜色遮罩图像?
- 11. 如何通过渐变的alpha遮罩cocos2d中的sprites?
- 12. 如何在Numpy的遮罩数组上组合遮罩?
- 13. 如何通过纹理遮罩更改生成的遮罩?
- 14. Infragistics遮罩XamGrid
- 15. BackgroundSubtractorMOG2的遮罩
- 16. 如何使用UIImage作为Objective-C中的颜色的遮罩Objective-C
- 17. Swift Alpha颜色
- 18. 在matlotlib颜色地图中使用渐变颜色遮罩两组值颜色编号
- 19. SVG遮罩元素
- 20. CSS3遮罩样式
- 21. 圈遮罩效果
- 22. Android位图遮罩
- 23. openGL纹理遮罩
- 24. 添加遮罩层
- 25. pyglet:使用指定的alpha遮罩blit纹理
- 26. 如何在QPixmap上应用黑色遮罩层?
- 27. actionscript 3.0可见遮罩在可见遮罩对象上
- 28. 如何防止UIImageView遮罩的裁剪
- 29. 如何创建可拖动的遮罩?
- 30. GlPolygonStipple的遮罩参数如何工作?
我正在做这样的事情。这个问题(我看到我没有完全解释)是我需要一个解决方案,每个图像可以缓存和重复使用很多次。每次需要时我都无法重新生成图像,我无法将图像缓存到所需的每种颜色中。 – 2010-12-16 21:02:53
@TedHopp我很高兴你有一个解决方案。但是,我上面的解决方案可以缓存图像数据,而不会缓存每种颜色的变化。请注意,图像数据只加载一次(window.onload'中的第115行),而每更新一次滑块(作为'updateColor()'的一部分),则重新创建每种颜色的变化。 – Phrogz 2010-12-16 21:13:08
我试图避免的是为每个颜色变化生成一个新图像。 Porter-Duff滤色器似乎就是这样做的。 – 2011-01-13 00:08:37