1

Android Activity 或 OpenGL 中带状图像的可能解决方案是什么。

看看下面的答案。

希望能帮助到你

4

1 回答 1

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,您只需绑定应用上层函数后创建的位图

于 2012-07-12T12:59:52.863 回答