Android颜色格式(RGB565、ARGB8888)

Android颜色格式(RGB565、ARGB8888),android,bitmap,rgb,bitmapfactory,argb,Android,Bitmap,Rgb,Bitmapfactory,Argb,(使用上述选项创建Bitmat) 当使用上述代码时,我得到以下结果 我的平板电脑设备上没有色带 测试手机上明显的色带(三星Galaxy Ace) 我的平板电脑上没有色带 银河王牌上明显的色带 结果同上 getHolder().setFormat(PixelFormat.RGBA_888); Options options = new BitmapFactory.Options(); options.inDither=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;
    
  • 我平板电脑上的色带

  • SG 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上的色带
因此,总之,只有PixelFormat.xxxx部分似乎有任何区别。我的理解是,这是设置支架颜色格式。这将影响所有绘制的内容。(即,所有内容都将采用该格式)

有人能解释一下下面这句话的目的吗

options.inPreferredConfig=Bitmap.Config.xxxxxxx

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

性能是最重要的,所以我可能必须更改原始png文件,使它们没有渐变(即,将它们绘制为RGB565-这是明智的还是我应该坚持使用8888?),或者抖动应该解决这个问题?(因为正如你所看到的,我已经启用了它,但它似乎没有帮助)

你知道为什么乐队总是在王牌上吗?这可能是硬件限制吗

谢谢,这一切都很混乱


(顺便说一句,我已经阅读了官方指南,在向SO发布问题之前,我总是会查看该指南以及其他相关SO问题,但官方指南(通常情况下)没有为我澄清这一点,我无法通过其他问题找到答案,因此,如果它已经在这里,我深表歉意).

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

为了让我的一个应用程序背景成为not band,我必须执行以下操作:

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

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

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;
有人能解释一下下面这句话的目的吗

options.inPreferredConfig=Bitmap.Config.xxxxxxx

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

不同的
位图
配置将具有不同的内存占用<代码>RGB_565是一种16位彩色格式<代码>ARGB_8888是32位格式


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

啊,这可能解释了Ace的问题,您上面的实现能与surfaceview一起工作吗?(我正在用Canvas.drawbitmap绘制背景)-谢谢,我不确定,因为我只使用了静态png,但您可以尝试在onAttachedToWindow OverrideProperty上执行设置格式,确保ARGB_8888现在是默认值。谢谢@TylerM,我了解不同的格式和内存大小等,我不明白的是你/我上面引用的那句话的目的。你是说,如果我有一个RGB8888图像,并加载它与inPreferredConfig设置为RGB565它将在内存中更小?如果是这种情况,为什么当我将支架设置为8888时,它仍然显示为无带入(即32位格式)?对不起,如果这不合理,但我不明白。。。。。。。谢谢:-/
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;
<?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" />
@Override
public void onAttachedToWindow() {
        super.onAttachedToWindow();

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