Решение Android Color Banding для Android

Какое возможно решение для полосатых изображений в Android Activity или в OpenGl.

Посмотрите на ответ ниже.

Надеюсь, поможет

1 ответ

Решение

Цветная полоса решена ооооооооооыыыыыыаааааааааа

Я решил цветовую полосу в два этапа

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 вы просто привязываете растровое изображение, созданное после применения верхних функций

Другие вопросы по тегам