在Android中应用过滤器时图像太吵了

时间:2015-10-29 14:35:34

标签: android image bitmap lookup-tables

我正在开发一个包含过滤器和裁剪的应用程序。我在这里使用cropping library。在这里,我使用了8 * 8 luts,如sample lut。在这里,我想要过滤过滤后的图像(8 * 8 lut)

以下是裁剪图像的逻辑。

Bitmap cropbitmap = ivCropimageView.getCroppedImage();

使用此位图我生成如下所示的缩略图位图。

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

当我尝试为所有过滤器生成缩略图时,缩略图显示的噪音太像this

这个结果是我实施renderscript的答案。

所以如果有人有想法,请帮助我..

2 个答案:

答案 0 :(得分:0)

我正在开发一个LUT应用程序库,可以简化在Android中使用LUT图像的过程。现在它还猜测了LUT的颜色轴:

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

它使用我在other post

中提到的algorythm

答案 1 :(得分:-1)

你可以通过这个,希望它能帮助你获得正确的过程。

照片是这里的主要位图。

mLut3D是存储在drawable

中的LUT图像数组
    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

希望它会有所帮助