Изображения становятся слишком шумными при применении фильтров в Android

Я разрабатываю приложение, которое также включает фильтры и обрезку. Здесь я использую библиотеку обрезки. Здесь я использовал 8*8 лут, например пример лут. Здесь я хочу ОБРЕЗАТЬ отфильтрованное изображение (8 * 8 лт)

Вот логика, чтобы обрезать изображение.

Bitmap cropbitmap = ivCropimageView.getCroppedImage();

Используя это растровое изображение, я создаю растровое изображение миниатюры, как показано ниже.

Bitmap thumbImage = ThumbnailUtils.extractThumbnail(cropbitmap, 190, 250);

Когда я пытаюсь создать миниатюры для всех фильтров, миниатюры отображаются слишком шумно, как этот.

Это результат, когда я реализовал ответ из рендерскрипт.

Так что, если у кого-то есть идея ab, пожалуйста, помогите мне ..


person user512    schedule 29.10.2015    source источник


Ответы (2)


Я работаю над библиотекой приложений LUT, которая упрощает использование изображений LUT в Android. Теперь он также угадывает цветовые оси LUT:

https://github.com/dntks/easyLUT/wiki

Он использует алгоритм, который я упоминал в другое сообщение

person abbath    schedule 09.06.2017

Вы можете пройти через это, надеюсь, это поможет вам получить правильный процесс.

фотография является основным растровым изображением здесь.

mLut3D — это массив изображений LUT, хранящихся в drawable.

    RenderScript mRs;
    Bitmap mLutBitmap, mBitmap;
    ScriptIntrinsic3DLUT mScriptlut;
    Bitmap mOutputBitmap;
    Allocation mAllocIn;
    Allocation mAllocOut;
    Allocation mAllocCube;
    int mFilter = 0;

mRs = RenderScript.create(yourActivity.this);
public Bitmap filterapply() {
        int redDim, greenDim, blueDim;
        int w, h;
        int[] lut;

        if (mScriptlut == null) {
            mScriptlut = ScriptIntrinsic3DLUT.create(mRs, Element.U8_4(mRs));
        }
         if (mBitmap == null) {
         mBitmap = photo;
}
        mOutputBitmap = Bitmap.createBitmap(mBitmap.getWidth(),
                mBitmap.getHeight(), mBitmap.getConfig());

        mAllocIn = Allocation.createFromBitmap(mRs, mBitmap);
        mAllocOut = Allocation.createFromBitmap(mRs, mOutputBitmap);
        // }

        mLutBitmap = BitmapFactory.decodeResource(getResources(),
                mLut3D[mFilter]);
        w = mLutBitmap.getWidth();
        h = mLutBitmap.getHeight();
        redDim = w / h;
        greenDim = redDim;
        blueDim = redDim;
        int[] pixels = new int[w * h];
        lut = new int[w * h];
        mLutBitmap.getPixels(pixels, 0, w, 0, 0, w, h);
        int i = 0;

        for (int r = 0; r < redDim; r++) {
            for (int g = 0; g < greenDim; g++) {
                int p = r + g * w;
                for (int b = 0; b < blueDim; b++) {
                    lut[i++] = pixels[p + b * h];
                }
            }
        }

        Type.Builder tb = new Type.Builder(mRs, Element.U8_4(mRs));
        tb.setX(redDim).setY(greenDim).setZ(blueDim);
        Type t = tb.create();
        mAllocCube = Allocation.createTyped(mRs, t);
        mAllocCube.copyFromUnchecked(lut);

        mScriptlut.setLUT(mAllocCube);
        mScriptlut.forEach(mAllocIn, mAllocOut);

        mAllocOut.copyTo(mOutputBitmap);
        return mOutputBitmap;
    }

вы увеличиваете значение mFilter, чтобы получить другой эффект фильтра с разными изображениями LUT, которые у вас есть, проверьте это.

вы можете перейти по этой ссылке на github для получения дополнительной помощи, я получил ответ здесь: - https://github.com/RenderScript/RsLutDemo

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

person Shubham    schedule 28.01.2016