【问题标题】:Android gradient graphics quality (scaled bitmap)Android渐变图形质量(缩放位图)
【发布时间】:2011-12-21 23:04:53
【问题描述】:

我想在我的应用程序中显示一个带有渐变的初始屏幕。但是背景中渐变的质量很差。所以我创建了一个简单的辐射渐变来仔细观察。

编辑:也许我应该提到我正在使用 BitmapFactory.createScaledBitmap();和 BitmapFactory.decodeStream() (图形在 assets 文件夹中。)

结果如下:

原始 *.jpg(质量 100%)

Xperia X10 截图(我用 Eclipse 截图)

【问题讨论】:

    标签: android graphics bitmap


    【解决方案1】:

    您可以在没有任何 jpg 文件的情况下执行此操作,但使用 shape drawable。创建矩形并为gradient 标签提供必要的参数。

    【讨论】:

    • 谢谢,但位图更复杂。我刚刚上传了这个 jpeg 来做一个简单的例子。
    • 然后你就可以像 Skype 应用程序一样 - 他们只是为不同的屏幕绘制了很多可绘制对象。我可以说这是一个很好的解决方案,但它仍然有效:)
    • 按照这个速度,我需要很多drawables。我要缩放的图像是使用 Photoshop 为小游戏创建的背景。如果只是几个元素,那将是一个很好的解决方案。但是背景太复杂了。还有一些不是辐射状或线性的渐变。
    • 这取决于图片,但您可以尝试一些小技巧——使用一张大图片,并将其居中而不进行任何转换。对于小型手机,只有图片中心可见
    • 非常不舒服且效率低下。实际上在某些设备上我已经有内存问题了。这种作弊似乎需要安静很多的记忆。但是,我自己找到了解决方案。我将使用 ARGB_8888 创建一个位图,并使用画布在其上绘制所需的位图。稍后我将发布一个示例。谢谢!
    【解决方案2】:

    为了缩放位图并保持 ARGB_8888,我创建了一个所需大小的新位图。然后我使用画布在带有drawBitmap 的新位图上绘制内在位图。此方法允许我在新位图上绘制位图之前对其进行缩放。

    inputStream = assetManager.open(path);
    originalBitmap = BitmapFactory.decodeStream(inputStream, null, opts);
    
    Bitmap resizedBitmap = Bitmap.createBitmap(desiredX, desiredY, Config.ARGB_8888);
    
    Canvas canvas = new Canvas(resizedBitmap);
    canvas.drawBitmap(originalBitmap, null, new Rect(0, 0, desiredX, desiredY), null);
    
    inputStream.close();
    return resizedBitmap;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多