【问题标题】:Awful background image quality in AndroidAndroid中糟糕的背景图像质量
【发布时间】:2012-01-15 02:23:29
【问题描述】:

我正在尝试在我的活动中放置背景,但图像质量不是预期的。

图片在蓝色条纹上方有一个简单的渐变,目前看起来像这样:

我的活动布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/background_register"
    android:drawingCacheQuality="high" >
</LinearLayout>

背景描述符(drawable/background_register):

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:filter="true"
    android:tileMode="repeat"
    android:gravity="center"
    android:src="@drawable/background_blue_565" />

目前我有一个描述 BitmapDrawable 的 XML 文件,它是活动的 LinearLayout 背景。但我已经尝试了到目前为止我发现的一切。启用抖动、抗锯齿、平铺、RGBA_8888 模式......你的名字。有没有人有不同的解决方案或想法我可以尝试?我将不胜感激。

顺便说一句,我目前正在 Galaxy S II 中开发应用程序。

【问题讨论】:

    标签: android image background gradient


    【解决方案1】:

    对我来说,这似乎是一个图像问题。您保存图像和格式的设置是什么?它看起来像我正在寻找的压缩伪影。

    【讨论】:

    • 感谢您的快速响应!图像很好,当我在 Android 库中看到它时看起来很棒。似乎操作系统压缩了太多图像,特别是当它具有渐变时。
    • 问题是您的图像被一个非常有限的托盘压缩,可能是 256 色。如果没有足够的信息梯度会像那样退化。确保您使用的是相同的图像。就像 Gaz 建议打开你的 APK 并检查它。也将图像保存为 jpg 并重试。如果它有效,那么你的问题就是你的形象。
    • 据我所知,如果使用超过 256 种颜色的图像不应该被压缩,但我可能是错的。
    • Adam Surfari,这不是答案……我打开了 APK,提取了图像,然后在 Android 库中打开了图像,它看起来很完美。这一定是应用程序在将图像应用为 LinearLayout 背景时所做的事情......
    【解决方案2】:

    首先,确保您的原始图片看起来不错,这样您就不会从那里得到问题。
    然后,在您的 onCreate() 方法中,执行:

    code1:

    getWindow().getDecorView().getBackground().setDither(true);
    getWindow().setFormat(PixelFormat.RGBA_8888);
    

    已弃用:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

    要将您的图像显式加载为 32 位图像(RGBA-8888 配置),请在加载视图的位置添加以下内容:

    代码2:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options);
    
    findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient));
    


    不同方法之间的比较: (这些都是生成的应用程序的屏幕截图)

    我的源图像(左侧 64 色,右侧 24 位):
    图片1和图片2:

    1:原始 64 色 图像 (image1) 从布局 XML 设置为背景:

    2:同一张图片(image1),使用code1

    3:同时使用 code1code2 的同一图像 (image1):

    4:image2,加载了 code1code2(在这种情况下,抖动并不重要,因为源和目标都使用每种颜色 8 位):
    @ 987654327@

    请注意图像 3 中生成的伪影如何已存在于原始图像中。

    注意:如果有人知道如何将图像缩小一点,请随时编辑这篇文章......

    【讨论】:

    • 感谢您的快速响应!尝试了你想要的一切,但没有运气。图片很好,当我在 Android 库中看到它时看起来很棒。
    • 您是在程序中对其进行任何操作还是只是将其设置为xml中的背景?这绝对看起来像一个图像压缩问题,在增加位深度和/或启用抖动时总是会自行纠正。
    • 我只是将它设置为背景。我已经用布局更新了我的问题,所以它可能会更清楚。
    • Jave,我按照你写的(谢谢!),图像目前看起来像这样:bit.ly/w4ErRR 如你所见,它还不完美......不过,谢谢你,它现在好一点了。如果您找到更好的解决方案,请分享!
    • 现在看起来好多了 :) 如果我遇到更好的解决方案,我会更新我的答案。
    【解决方案3】:

    问题是您的 PNG 已转换为 256 色,请在您选择的 ZIP 工具中打开您的 APK 并手动检查。如果是这种情况,请确保您的 PNG 具有:

    1. Alpha 通道
    2. 一个略透明的像素

    这应该可以防止它被转换为索引调色板。

    【讨论】:

    • 嗨,嘎斯!看起来图像确实在 APK 中被压缩,但是从那里提取它并在 Android 库中显示它会显示一个很好的图像,没有压缩或伪影问题。即使使用 Alpha 通道和透明像素。
    • 天哪,谢谢。我的应用程序上的一张图像出现问题,刚刚打开应用程序,它确实被转换为 256 色 PNG。问题是,即使有透明度,我仍然无法正确导出。 :/ 至少我现在知道问题所在了...
    猜你喜欢
    • 2022-12-18
    • 2011-06-15
    • 2012-04-26
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多