安卓编辑位图频道
2022-09-03 13:14:42
可以使用 访问给定位图的 alpha 通道,但我无法找到任何实际设置位图的 alpha 通道的方法。extractAlpha()
如何将多个灰度图像重新组合成通道,使用Android将它重新组合成一个位图?
可以使用 访问给定位图的 alpha 通道,但我无法找到任何实际设置位图的 alpha 通道的方法。extractAlpha()
如何将多个灰度图像重新组合成通道,使用Android将它重新组合成一个位图?
很有可能将单独的通道重新组合回 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...
使用上述代码和以下4个图像(分别为红色,绿色,蓝色和alpha):
我们得到以下结果:
简单说明一下:红色椭圆形是透明背景上的不透明红色椭圆形 - 颜色对于这个并不重要,但alpha确实如此
操作位图是一件非常简单的事情,当直接访问像素(字节)时。要在Android中执行此操作,您可以通过此应用程序执行此操作
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] b = bos.toByteArray();
现在,您可以执行任何图像处理,转换或您喜欢的组合。
我希望这就是你一直在寻找的。