我正在开发一个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颜色不一样。有什么问题??
答案 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