Android编辑位图频道

Kle*_*ine 14 java android paint bitmap color-channel

可以访问给定位图的alpha通道extractAlpha(),但我无法找到任何方法来实际设置位图的alpha通道.

如何将多个灰度图像作为通道重新组合成Android的位图?

Kev*_*ion 23

很有可能将单独的通道重新组合回ARGB图像.您只需要灰度通道图像和带有所需Alpha通道的图像 - 请注意,这不是不透明的灰度图像,而是具有所需alpha的图像.然后Paint使用适当的方法将每个通道绘制PorterDuffXfermode到空白的黑色填充位图上.

// have your 3 channel grayscales and 1 alpha bitmap loaded by this point

Paint redPaint = new Paint();
redPaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN));
redPaint.setShader(new BitmapShader(redChanImg, TileMode.CLAMP, TileMode.CLAMP));
redPaint.setColorFilter(new PorterDuffColorFilter(Color.RED, Mode.DARKEN));

Paint greenPaint = new Paint();
greenPaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN));
greenPaint.setShader(new BitmapShader(greenChanImg, TileMode.CLAMP, TileMode.CLAMP));
greenPaint.setColorFilter(new PorterDuffColorFilter(Color.GREEN, Mode.DARKEN));

Paint bluePaint = new Paint();
bluePaint.setXfermode(new PorterDuffXfermode(Mode.LIGHTEN));
bluePaint.setShader(new BitmapShader(blueChanImg, TileMode.CLAMP, TileMode.CLAMP));
bluePaint.setColorFilter(new PorterDuffColorFilter(Color.BLUE, Mode.DARKEN));

Paint alphaPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
alphaPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

c.setBitmap(resultImage);
c.drawRect(0, 0, width, height, redPaint);
c.drawRect(0, 0, width, height, greenPaint);
c.drawRect(0, 0, width, height, bluePaint);
c.drawBitmap(alphaImg, 0, 0, alphaPaint);

//save off resultImage, display it, etc...
Run Code Online (Sandbox Code Playgroud)

使用上面的代码和以下4个图像(分别为红色,绿色,蓝色和alpha): 替代文字替代文字替代文字替代文字

我们得到以下结果:


替代文字


只是一个简单的说明:红色椭圆形是透明背景上的不透明红色椭圆形 - 颜色对于这个没有关系,但alpha确实如此