簡體   English   中英

如何將灰度位圖轉換為Alpha蒙版?

[英]How to convert grayscale bitmap into alpha mask?

我有一個灰度的JPG圖片,我想將其加載到Bitmap.Config.ALPHA_8格式的Bitmap中。 那有可能,我該怎么辦?

從PNG(可以有空的R,G,B通道)加載Alpha通道很簡單,但是我想使用JPG進行壓縮。

這是有關如何將兩個不透明位圖與一個alpha通道合並為一個后續問題

ColorMatrix搶救!

引用Android文檔ColorMatrix:

5x4矩陣,用於轉換位圖的color + alpha分量。 矩陣存儲在單個數組中,其處理如下:[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q, r,s,t]當應用於顏色[r,g,b,a]時,所得顏色計算為(鉗制后)R'= a R + b G + c B + d A + e; G'= f R + g G + h B + i A + j; B′= kR + 1G + mB + nA + o; A'= p R + q G + r B + s A + t;

設置從紅色通道(或綠色或藍色,對於灰度無關...)獲取alpha值的顏色矩陣,然后在Paint.setColorFilter()使用它。 這是一個或多或少完整的示例:

final BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inScaled = false;

// Load source grayscale bitmap
Bitmap grayscale = BitmapFactory.decodeResource(getResources(), R.drawable.my_grayscale_mask, options);
// Place for  alpha mask. It's specifically ARGB_8888 not ALPHA_8, 
// ALPHA_8 for some reason didn't work out for me. 
Bitmap alpha = Bitmap.createBitmap(grayscale.getWidth(), grayscale.getHeight(),
        Bitmap.Config.ARGB_8888);
float[] matrix = new float[] {
        0, 0, 0, 0, 0,
        0, 0, 0, 0, 0,
        0, 0, 0, 0, 0,
        1, 0, 0, 0, 0};
Paint grayToAlpha = new Paint();
grayToAlpha.setColorFilter(new ColorMatrixColorFilter(new ColorMatrix(matrix)));
Canvas alphaCanvas = new Canvas(alpha);
// Make sure nothing gets scaled during drawing
alphaCanvas.setDensity(Bitmap.DENSITY_NONE);
// Draw grayscale bitmap on to alpha canvas, using color filter that
// takes alpha from red channel
alphaCanvas.drawBitmap(grayscale, 0, 0, grayToAlpha);
// Bitmap alpha now has usable alpha channel!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM