彩色安卓解决方案

时间:2012-07-12 12:59:51

标签: android eclipse image artifact dithering

Android Activity或OpenGl中带状图像的可能解决方案。

请看下面的答案。

希望它有助于

1 个答案:

答案 0 :(得分:2)

色带解决了ooooooooooyyyyyyyeaaaaaaaaaa

我分两个阶段解决了色带问题

1)*当我们使用BitmapFactory解码资源时,它解码RGB565中的资源,显示颜色条带,而不是使用ARGB_8888,所以我使用BitmapFactory.Options将解码选项设置为ARGB_8888

第二个问题是每当我缩放位图时它再次被绑定

2)这是一个艰难的部分,并进行了大量的搜索,最终工作 *用于缩放位图的Bitmap.createScaledBitmap方法在缩放后我还将图像缩小为RGB565格式我得到了带状图像(解决此问题的旧方法是在png中使用至少一个透明像素但没有其他格式如jpg或bmp工作)所以在这里,我创建了一个方法CreateScaledBitmap,用于在生成的比例位图中使用原始位图配置缩放位图(实际上我是通过logicnet.dk复制方法并在java中翻译)

    BitmapFactory.Options myOptions = new BitmapFactory.Options();
    myOptions.inDither = true;
    myOptions.inScaled = false;
    myOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;//important
    //myOptions.inDither = false;
    myOptions.inPurgeable = true;
    Bitmap tempImage =  
    BitmapFactory.decodeResource(getResources(),R.drawable.defaultart, myOptions);//important

    //this is important part new scale method created by someone else
    tempImage = CreateScaledBitmap(tempImage,300,300,false);

    ImageView v = (ImageView)findViewById(R.id.imageView1);
    v.setImageBitmap(tempImage);

//函数

public static Bitmap CreateScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)
{
    Matrix m = new Matrix();
    m.setScale(dstWidth  / (float)src.getWidth(), dstHeight / (float)src.getHeight());
    Bitmap result = Bitmap.createBitmap(dstWidth, dstHeight, src.getConfig());
    Canvas canvas = new Canvas(result);
    //using (var canvas = new Canvas(result))
    {
        Paint paint = new Paint();
        paint.setFilterBitmap(filter);
        canvas.drawBitmap(src, m, paint);
    }
    return result;

}

如果我错了,请纠正我。 还要评论它是否适合你。

我很高兴我解决了它,希望它对你们有用。

对于OpenGl,您只需绑定应用上层函数后创建的位图