【问题标题】:Android - Insert one image into another's transparent pixelsAndroid - 将一张图像插入另一张的透明像素
【发布时间】:2014-06-12 03:35:55
【问题描述】:

在 Android 中,我尝试在 FrameLayout 中对两个图像(在本例中为位图对象)进行分层。一张图片放在顶部,另一张图片插入到其下方,位于该图片的第一个透明像素处。

目前,我正在尝试使用Bitmap.getPixel() 来定位透明像素:

for (int i = 0; i < image_count; i++)
{
    //load page from internal memory
    topImages[i] = getImage("p"+i+".png");
    for (int x = 0; x < topImages[i].getWidth(); x++)
    {
        for (int y = 0; y < topImages[i].getHeight(); y++)
        {
            if (topImages[i].getPixel(x, y) == Color.TRANSPARENT)
            {
                bottomX[i] = x;
                bottomY[i] = y;
                break;
            }
        }
    }
}

然后,我使用两个 ImageView 将图像添加到 Frame Layout,并使用这些值来定位下部图像:

bottomView.setTranslationX(bottomX[position]);
bottomView.setTranslationY(bottomY[position]);

但是,底部图像的位置始终不准确,通常在每个给定图像的下边距和右边距不同(但始终相同)。我也尝试过setX()setY(),以及使用参数类似地设置TOPLEFT 值,结果相同)。我可以做些什么来确保放置始终保持一致,图像的top-left 位于(或接近)第一个透明像素?

【问题讨论】:

    标签: java android image bitmap


    【解决方案1】:

    如果您只想显示图像,您可以在 FrameLayout 中将它们添加为不同的框架。在您的 xml 中,首先将要显示的像素声明为透明像素,然后声明将具有透明像素的像素。

    【讨论】:

    • 你的意思是 FrameLayout 有办法自动将我的图像定位在透明区域吗?澄清一下,它们已经分层了;我需要的是能够使图像在透明区域居中。编辑:我还需要使用来自服务器的图像集自动执行此操作,因此我无法手动设置每个布局。
    • @user3732383 由于图像有透明区域,它们将是 png 格式。如果将它们放在 imageview 中,它将通过透明区域显示 imageview 后面的区域。因此,您可以在一个框架中获取不同的图像视图并将它们堆叠起来。如果图片的数量是动态的,你可以在布局中动态地增加 ImageViews。
    • 哦!是的。我已经能够正确地将一个图像放在另一个图像之上。那部分工作正常。我要做的是使底部图像的水平和垂直(x 和 y)位置自动与选择的任何顶部图像的第一个透明像素对齐。结果将是底部图像的左上角位于顶部图像的透明区域开始的位置。
    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2011-01-29
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多