Android彩色格式(RGB565,ARGB8888)

时间:2013-03-02 18:34:20

标签: android bitmap rgb bitmapfactory argb

    getHolder().setFormat(PixelFormat.RGBA_888);        

    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    options.inPurgeable=true;

(使用上述选项创建的Bitmat)

使用上述代码时,我得到以下结果.........

  • 我的平板电脑设备上没有色带
  • 测试手机(三星Galaxy Ace)上有明显的色带

    getHolder().setFormat(PixelFormat.RGBA_888);        
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_565; 
    options.inPurgeable=true;
    
  • 平板电脑上没有色带

  • Galaxy Ace上的明显色带
  • 与上述结果相同

    getHolder().setFormat(PixelFormat.RGB_565);     
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.RGB_565; 
    options.inPurgeable=true;
    
  • 平板电脑上的色带

  • SG Ace上的色带

    getHolder().setFormat(PixelFormat.RGB_565);     
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    options.inPurgeable=true;
    
  • 平板电脑上的色带

  • SG Ace上的色带

因此,总之,只有PixelFormat.xxxx部分似乎有所不同。我的理解是这是设置持有者颜色格式。这将影响绘制的所有内容。 (即,一切都将采用这种格式)。

有人可以解释下一行的目的是什么吗?

options.inPreferredConfig = Bitmap.Config.xxxxxxx

这似乎对已经绘制的位图没有任何影响。

性能是最重要的,所以我可能不得不改变我原来的png文件,因此它们没有渐变,(即将它们绘制为RGB565 - 这是可取的还是我应该坚持使用8888?)或应该抖动排序出来吗? (因为正如你所看到的,我已启用它但似乎没有帮助。)

任何想法为什么乐队总是在Ace?这可能是硬件限制吗?

感谢所有这一切非常混乱。

(PS我已经阅读了官方指南,我总是在向SO发布问题之前查看,以及查看其他相关的SO问题,但官方指南(通常情况下),并不清楚这对我而言,我无法通过其他问题找到答案,所以如果已经在这里就道歉了。

2 个答案:

答案 0 :(得分:5)

565格式是默认的,因为它可以更快地绘制并且需要更少的处理能力。至于你的SG Ace,我相信只有某些版本的Android支持8888颜色。

要让我的应用背景之一不是乐队,我必须执行以下操作:

1 - 为可绘制文件夹添加背景

2 - 使用以下内容创建background_dithered.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:src="@drawable/background" />

3 - 在活动代码中:

@Override
public void onAttachedToWindow() {
        super.onAttachedToWindow();

        getWindow().setFormat(PixelFormat.RGBA_8888);
}       

答案 1 :(得分:2)

  

有人可以解释下一行的目的是什么吗?

     
    

options.inPreferredConfig = Bitmap.Config.xxxxxxx

  
     

这似乎对已经绘制的位图没有任何影响。

不同的Bitmap配置会有不同的内存占用空间。 RGB_565是16位颜色格式。 ARGB_8888是32位格式。

无论您选择哪种getHolder().setFormat();配置,或者如何绘制它,ARGB_8888位图将比RGB_565格式的位图大得多(在内存中)