在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