Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使背景在图像中透明。(附示例图像)_Java_Android_Android Studio - Fatal编程技术网

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();

}