从位图创建遮罩
create a mask from bitmap
我有一张图像作为位图,例如
我想像这样从该位图中以编程方式创建掩码
我在网上搜索过,没有找到任何解决方法。
2003 Java Q and A about Masking Images
本网站提出的问题与您的相似,答案应该对您有所帮助。他们的代码是在 2003 年 Java 中编写的,但我相信您是在询问您计划在 Android Studio 中根据您在 Java 中的标签进行编程的内容。你的问题有点含糊,但也许这个网站会是一个很好的起点。有更长的解决方案,写出了完整的代码,但我将 post 列出其中一个解决方案。
在该论坛上 post 的解决方案之一是:
//get the image pixel
int imgPixel = image.getRGB(x,y);
//get the mask pixel
int maskPixel = mask.getRGB(x,y);
//now, get rid of everything but the blue channel
//and shift the blue channel into the alpha channels sample space.
maskPixel = (maskPixel &0xFF)<<24
//now, merge img and mask pixels and copy them back to the image
image.setRGB(x,y,imgPixel|maskPixel);
我找到了我的问题的解决方案我通过以下方式使用 PorterDuffColorFilter 为我的位图着色解决了我的问题。
public Bitmap tintBitmap(Bitmap bitmap, int color) {
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
Bitmap bitmapResult = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapResult);
canvas.drawBitmap(bitmap, 0, 0, paint);
return bitmapResult;
}
我有一张图像作为位图,例如
我想像这样从该位图中以编程方式创建掩码
我在网上搜索过,没有找到任何解决方法。
2003 Java Q and A about Masking Images
本网站提出的问题与您的相似,答案应该对您有所帮助。他们的代码是在 2003 年 Java 中编写的,但我相信您是在询问您计划在 Android Studio 中根据您在 Java 中的标签进行编程的内容。你的问题有点含糊,但也许这个网站会是一个很好的起点。有更长的解决方案,写出了完整的代码,但我将 post 列出其中一个解决方案。
在该论坛上 post 的解决方案之一是:
//get the image pixel
int imgPixel = image.getRGB(x,y);
//get the mask pixel
int maskPixel = mask.getRGB(x,y);
//now, get rid of everything but the blue channel
//and shift the blue channel into the alpha channels sample space.
maskPixel = (maskPixel &0xFF)<<24
//now, merge img and mask pixels and copy them back to the image
image.setRGB(x,y,imgPixel|maskPixel);
我找到了我的问题的解决方案我通过以下方式使用 PorterDuffColorFilter 为我的位图着色解决了我的问题。
public Bitmap tintBitmap(Bitmap bitmap, int color) {
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
Bitmap bitmapResult = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapResult);
canvas.drawBitmap(bitmap, 0, 0, paint);
return bitmapResult;
}