Android调色板:为什么无法与这张特定的图片配合使用?

8

我目前正在使用支持库(https://developer.android.com/tools/support-library/features.html#v7-palette)中的Palette API。

以下代码适用于数百张图片,没有问题。根据调色板结果设置文本和背景颜色。结果非常棒,非常好看(如果要在您的应用程序中重复使用,请不要犹豫!)。

不幸的是,在数百张图片中,只有一张无法正常工作并产生奇怪的结果。这就是这个 -> http://www.cineswellington.com/images/film/140929075044.jpg

由于调色板没有文档或调试模式,我真的很想知道会发生什么,并且是否有办法了解原始图片是否存在缺陷或其他问题。

Picasso.with(getActivity()).load("http://www.cineswellington.com/images/film/140929075044.jpg").into(t);

private Target t = new Target() {
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
            public void onGenerated(Palette palette) {
                ((ImageView) v.findViewById(R.id.iv)).setImageDrawable(new BitmapDrawable(bitmap));
                //At this point, the ImageView is correctly filled, so the bitmap object has no issue.
                int textColor = palette.getLightMutedColor(android.R.color.darker_gray);
                int bgColor = palette.getDarkMutedColor(android.R.color.white);
                Log.d("CVE","textColorInt: "+ textColor);
                Log.d("CVE","bgColorInt: "+bgColor);
                Log.d("CVE","textColorHexa: "+String.format("#%06X", 0xFFFFFF & textColor));
                Log.d("CVE","bgColorHexa: "+String.format("#%06X", 0xFFFFFF & bgColor));
            }
        });


    }
};

以下是输出结果:

textColorInt: 17170432
bgColorInt: 17170443
textColorHexa: #060000
bgColorHexa: #06000B

如果有人能帮助我重现这个错误或告诉我这只是在我这边发生的,那将会很棒。


请问您能否同时提供正确的示例结果? - Ozan
正确的示例可以使用互联网上的任何图片制作,并且呈现为标准颜色(蓝色变化、红色、绿色等)。 - Waza_Be
2个回答

4
图像似乎只由鲜艳的颜色组成,因此很难创建适合它的柔和色调。算法无法做到这一点也就不足为奇了。
如果柔和的深/浅色太相似,请尝试使用getVibrantColor()函数。

1
静音颜色不为空,已发送一些结果... 即使它们为空,也有我指定的默认颜色... - Waza_Be
可能由于透明的红色火焰,调色板中有一些暗淡的颜色,因此它们被返回。我猜它只返回调色板中处于暗淡范围内的最暗和最亮的颜色。 - ovikoomikko

0
我猜调色板算法中“浅暗色”和“深暗色”之间没有明显的最小颜色差异,即不应该将一个颜色用作另一个颜色的文本颜色。
在Romain Guy在Google IO上的演示中,他将“浅暗色”用于背景,“浅充满活力”的文本颜色。
你不应该使用充满活力的颜色来作为文本颜色吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接