2

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

<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).

使用过滤后,得到照片位图为

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

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

mGPUImageView.setImage(bitmapSharpness);

IE。锐度预览过滤颜色和 setTmage 到 mGPUImageView 颜色不一样。问题是什么??

4

3 回答 3

0

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

我在没有预览的情况下创建了 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

于 2021-04-21T16:16:55.720 回答
0

你用过 GPUImageFilterGroup 吗?像那样:

GPUImageFilterGroup mFilterGroup = new GPUImageFilterGroup();
mFilterGroup.addFilter(brightnessFilter);
mFilterGroup.addFilter(sharpnessFilter);
mGpuImage.setFilter(mFilterGroup);
于 2016-03-09T12:01:32.950 回答
0

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

mGPUImageView.setFilter(new GPUImageFilter());
于 2019-08-26T06:53:14.130 回答