Java 使背景在图像中透明。(附示例图像)
如何从图像中删除白色背景色(此处为白色)?。 或 要使图像背景透明 这是两张图片。Java 使背景在图像中透明。(附示例图像),java,android,android-studio,Java,Android,Android Studio,如何从图像中删除白色背景色(此处为白色)?。 或 要使图像背景透明 这是两张图片。 图1为:白色背景的文本 图2为:绿色(或接近绿色)图像 我需要使图像1的白色背景透明e以使此图像中的蓝色颜色透明 这里我们有一个像这样的蓝色背景的图像,我们想在一个白色背景的小程序中显示它。我们所要做的就是寻找“Alpha位”设置为不透明的蓝色,并使其透明 您可以调整它并使白色颜色透明 您也可以检查。问题是,您希望在运行时使背景透明,还是仅此图像?如果只有这一个,那么你应该编辑图像与任何工具喜欢删除背景色。只需
图1为:白色背景的文本
图2为:绿色(或接近绿色)图像 我需要使图像1的白色背景透明e以使此图像中的
蓝色
颜色透明
这里我们有一个像这样的蓝色背景的图像,我们想在一个白色背景的小程序中显示它。我们所要做的就是寻找“Alpha位”设置为不透明的蓝色,并使其透明
您可以调整它并使白色
颜色透明
您也可以检查。问题是,您希望在运行时使背景透明,还是仅此图像?如果只有这一个,那么你应该编辑图像与任何工具喜欢删除背景色。只需在此工具中打开此图像,然后将其另存为PNG,勾选“保存透明颜色”,取消勾选“使用窗口背景色”,然后按enter键。然后选择白色。你可以用photoshop轻松完成 使用魔杖或套索工具,选择要透明的图像区域。 然后点击删除按钮 有关更多信息,请查看此 你也可以检查这个
这里很有用当我不得不解决这个问题时,我使用了一个缓冲区
private IntBuffer buffer;
public void toBuffer(File tempFile){
final Bitmap temp = BitmapFactory.decodeFile(imgSource
.getAbsolutePath());
buffer.rewind(); //setting the buffers index to '0'
temp.copyPixelsToBuffer(buffer);
}
然后,您只需编辑缓冲区上的所有像素(int值)(如中所述)。。。
…将0xFFFFFF
(白色和透明)的ARGB设置为0x00?????
(任何颜色都合适,反正是透明的)
下面是编辑缓冲区透明度的代码:
public void convert(){
for (int dy = 0; dy < imgHeight; dy ++){
for (int dx = 0; dx < imgWidth; dx ++ ){
int px = buffer.get();
int a = (0xFF000000 & px) >> 24;
int r = (0x00FF0000 & px) >> 16;
int g = (0x0000FF00 & px) >> 8;
int b = (0x000000FF & px);
int result = px;
if (px == 0xFFFFFFFF){ //only adjust alpha when the color is 'white'
a = 0xFF000000; //transparent?
int result = a | r | g | b;
}
int pos = buffer.position();
buffer.put(pos-1, result);
}
}
也许你还想知道如何映射缓冲区
public void mapBuffer(final File tempFile, long size) throws IOException {
RandomAccessFile aFile = new RandomAccessFile(tempFile, "rw");
aFile.setLength(4 * size); // 4 byte pro int
FileChannel fc = aFile.getChannel();
buffer = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
.asIntBuffer();
}
你试过@color/transparent吗?你能说得更具体些吗?你想只做一次吗?或者您想以编程方式对图像执行此操作吗?所有图像都具有相同的颜色模式(黑色文本和白色背景)。我正在从目录/文件夹中读取这些图像,需要在布局上显示(具有绿色背景)。这不是完整的答案,这试图引导OP实现目标。。。由于并没有提供任何代码,您如何确保转换图像的过程将在android中进行?也许图像只需要转换一次。。。此外,将此函数从
java.awt
转换为android.graphics
,并非不可能。最后不能不提请随意发布您自己的答案,这样我们可以进一步帮助您:)您说得很对,这个问题没有提供太多线索-我用了您答案中描述的透明度-对我来说效果很好…对不起,当我听起来很刺耳时-我不是有意这么做的。。。有时会发生这种情况,对此我真的很抱歉:-$puh-当我做这件事时,那是很久以前的事了,我几乎记不起我当时做了什么-想法是将一幅图像读入缓冲区,然后在缓冲区上走一走,编辑每个像素。。。然后用你的缓冲区创建一个文件…酷,你是一个宽容的人-我希望我有时也会一样。。。(仍在努力)…我也有同样的想法,新手手动编辑图像比编写渲染例程更便宜…我想在运行时使背景透明谢谢你的回答。我希望在运行时使背景透明。我在android应用程序中渲染了很多图像。我在运行时将其添加到容器中。我怎样才能务实地做到这一点?@smoke抱歉,但我不知道如何在运行时做类似的事情=/也许我混淆了颜色模型,我不记得是100%不透明=0xFF????
还是100%不透明=0x00????
所以你必须自己编辑颜色值-也许你想使用任何其他颜色作为透明。。。我很确定颜色不是你真正的问题^^
public void mapBuffer(final File tempFile, long size) throws IOException {
RandomAccessFile aFile = new RandomAccessFile(tempFile, "rw");
aFile.setLength(4 * size); // 4 byte pro int
FileChannel fc = aFile.getChannel();
buffer = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
.asIntBuffer();
}