【问题标题】:Loading bitmap with RGB565 Config使用 RGB565 配置加载位图
【发布时间】:2012-08-27 19:12:57
【问题描述】:

我正在从我的资产文件夹中使用首选配置 RGB565 加载我的位图并记录它们的格式配置,但我总是得到 ARGB8888。我确定我的一些位图配置是 RGB565 但我认为它们涵盖了一个区域一个 ARGB8888 位图。如何以自己的格式加载它们?

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeStream(in,null,options);
Log.d("a", fileName+" "+bitmap.getConfig().name());

【问题讨论】:

  • "preferred" 并不意味着你总会得到它。您的设备可以选择不提供该格式
  • 好的,但是我如何从我的资产文件夹中将位图加载为 RGB565 格式?
  • 你写的代码应该可以正常工作。
  • @Doomsknight 我总是从 Logs 获得 ARGB8888。选项没有变化。

标签: android bitmap


【解决方案1】:

您不会总是以这种方式获得 RGB565 - 它取决于编码(它是首选编码)

加载位图后,您可以创建一个新位图并将其复制到那里...因为您正在有效地重新编码图像。

Bitmap maskBitmap = Bitmap.createBitmap( orig.getWidth(), orig.getHeight(), Bitmap.Config.RGB_565 );
Canvas c = new Canvas();
c.setBitmap(maskBitmap);
Paint p = new Paint();
p.setFilterBitmap(true); // possibly not nessecary as there is no scaling
c.drawBitmap(orig,0,0,p);
orig.recycle();

那么就可以使用 maskBitmap 作为加载的位图了。

【讨论】:

  • 谢谢,但这不是会增加加载时间吗?
  • @droidmachine 并增加内存使用量。这是非常糟糕的。
  • @Doomsknight Okey 但是没有将位图加载为 rgb565 的解决方案吗?实际上我的目的是将此位图与 opengl 的 glTex2D 函数一起使用并减少内存使用。我该怎么办?
  • @siliconeagle 我没有标记下来。我只是删除了接受的答案检查。我只想在不需要 ARGB8888 时使用 RGB565 位图。我该怎么做?
  • 这就是这段代码的作用。你必须转换图像。 Simialr 缩放它-您必须分配新的内存并将重新编码的像素复制到其中。你就是这样做的。是的,当您加载位图时它会使用更多内存,但之后 ARGB8888 位图被取消分配(orig.recycle()),剩余位图为 RGB565。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多