GPUImageView setImage(位图)第二次无法正常工作

时间:2016-02-22 13:07:50

标签: android image-processing android-gpuimageview

我正在开发一个Photo应用程序,我使用android GPUImageView进行图像编辑。我想使用多个过滤器。 xml部分就像

XXXXX.apnsswift

如果我使用亮度滤镜,使用搜索条更改值并一次显示预览,而不是下次如何在滤镜图像上使用锐度滤镜。 我将照片的位图设置为

<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">

            <jp.co.cyberagent.android.gpuimage.GPUImageView
                android:id="@+id/gpuimage"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="fitXY" />

            <SeekBar
                android:id="@+id/seekBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="bottom"
                android:max="100" />
        </FrameLayout>

使用过滤后,将照片位图设为

mGPUImageView.setImage(bitmapPhoto).

但问题是,如果我想将bitmapSharpness设置为GPUImageView,则过滤后的颜色会失真。

Bitmap bitmapSharpness = mGPUImageView.getGPUImage().getBitmapWithFilterApplied();

即。锐度预览过滤后的颜色和再次setTmage到mGPUImageView颜色不一样。有什么问题??

3 个答案:

答案 0 :(得分:0)

您使用过GPUImageFilterGroup吗?那样:

GPUImageFilterGroup mFilterGroup = new GPUImageFilterGroup();
mFilterGroup.addFilter(brightnessFilter);
mFilterGroup.addFilter(sharpnessFilter);
mGpuImage.setFilter(mFilterGroup);

答案 1 :(得分:0)

GPUImageView上已应用了一个过滤器。如果设置过滤后的输出,则该过滤器还将应用于过滤后的输出以进行渲染。要查看没有更改的新设置的位图,可以应用以下代码:

mGPUImageView.setFilter(new GPUImageFilter());

答案 2 :(得分:0)

我遇到了同样的问题,但在任何地方都没有得到任何解决方案,我不知道为什么 git 所有者没有解决这个问题,但我找到了另一种在 GPUImageView 中设置图像的方法,这里是解决方案

我在没有预览的情况下创建了 GPUImageView,每次当我需要更改图像时,我只需删除旧的 gpuImageView 并像这样创建一个新的

public void onShow() {
        if(gpuImageViewConstraintLayout.getChildCount() > 0){
            gpuImageViewConstraintLayout.removeAllViews();
        }
//        creating new GPUImageView and add layout manager in gpuImageView
        gpuImageView = new GPUImageView(activity);
        ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        gpuImageView.setLayoutParams(layoutParams);

//        create Group filter list
        filterList = createFilterList();
        gpuImageFilterGroup = new GPUImageFilterGroup(filterList);

//        set image in gpuImage view
        gpuImageView.setImage(activity.getMainBit());

//        set group Filter in gpuImageView
        gpuImageView.setFilter(gpuImageFilterGroup);

//        add gpuImageView in gpuImageViewConstraintLayout
        gpuImageViewConstraintLayout.addView(gpuImageView);

//        change the visibility of gpuImageViewConstraintLayout
        gpuImageViewConstraintLayout.setVisibility(View.VISIBLE);

//        request render
        gpuImageView.requestRender();

//        other functionality
         ....................
         ..........
         ..............
    }

public List<GPUImageFilter> createFilterList() {
        List<GPUImageFilter> filters = new ArrayList<GPUImageFilter>();
        filters.add(BRIGHTNESS_GROUP_FILTER_ITEM_NUMBER, new GPUImageBrightnessFilter(0.0f));
        filters.add(CONTRAST_GROUP_FILTER_ITEM_NUMBER, new GPUImageContrastFilter(1.0f));
        filters.add(SATURATION_GROUP_FILTER_ITEM_NUMBER, new GPUImageSaturationFilter(1.0f));
        filters.add(SHARPNESS_GROUP_FILTER_ITEM_NUMBER, new GPUImageSharpenFilter(0.0f));
        filters.add(SOFTNESS_GROUP_FILTER_ITEM_NUMBER, new GPUImageGaussianBlurFilter(0.0f));
        filters.add(TEMPERATURE_GROUP_FILTER_ITEM_NUMBER, new GPUImageTemperatureFilter(0.0f));
        filters.add(TINT_GROUP_FILTER_ITEM_NUMBER, new GPUImageTintFilter(0.0f));
        filters.add(VIBRANCE_GROUP_FILTER_ITEM_NUMBER, new GPUImageVibranceFilter(0.0f));
        filters.add(HUE_GROUP_FILTER_ITEM_NUMBER, new GPUImageHueFilter(0.0f));
        filters.add(WHITE_BALANCE_GROUP_FILTER_ITEM_NUMBER, new GPUImageWhiteBalanceFilter(5000.0f, 0.0f));
        return filters;
    }

我希望这会有所帮助。 这是 git 问题和我的解决方案的链接 -> https://github.com/cats-oss/android-gpuimage/issues/381