GpuImage 在Android 上的應用以及各種效果參照表

  • Step 1: GpuImage 集成
implementation 'jp.co.cyberagent.android:gpuimage:2.0.4'
  • Step 2: 佈局中使用

在佈局中加上GPUImageView,爲了顯示處理後的圖片載體

    <jp.co.cyberagent.android.gpuimage.GPUImageView
        android:id="@+id/gpu_image_later"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:gpuimage_show_loading="false"
        app:gpuimage_surface_type="texture_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  • Step 3: 代碼中使用
    1:在Activity 中,創建GPUimage 以及將原始圖片展示出來
 gpuImageView = findViewById(R.id.gpu_image_later);
 gpuImage = new GPUImage(this);
 oldBitmap=BitmapFactory.decodeResource(this.getResources(), R.mipmap.fengjin);
 gpuImageView.setImage(oldBitmap);

2:獲取對應想要處理的效果Filter

blic class GPUFilter {
   
   
    public static final int FAST_GAUSSIAN_BLUR_FILTER = 1;//高斯模糊
    public static final int BOX_BLUR_FILTER = 2;//盒裝模糊
    public static final int CONVOLUTION_3X3_FILTER = 3;//3x3卷積,高亮大色塊變黑,加亮邊緣、線條等
    public static final int TEXTURE_3X3_FILTER = 4;
    public static final int ADD_BLEND_FILTER = 5;// 通常用於創建兩個圖像之間的動畫變亮模糊效果
    public static final int ALPHA_BLEND_FILTER = 6; //透明混合,通常用於在背景上應用前景的透明度
    public static final int BRIGHTNESS_FILTER = 7;//亮度
    public static final int EXPOSURE_FILTER = 8;//曝光

    public static GPUImageFilter getGPUImageFilter(int filerFlag) {
   
   
        GPUImageFilter mGPUImageFilter;
        switch (filerFlag) {
   
   
            default:
            case FAST_GAUSSIAN_BLUR_FILTER:
                mGPUImageFilter = new GPUImageGaussianBlurFilter();
                break;
            case BOX_BLUR_FILTER:
                mGPUImageFilter = new GPUImageBoxBlurFilter();
                break;
            case CONVOLUTION_3X3_FILTER:
                mGPUImageFilter = new GPUImage3x3ConvolutionFilter();
                break;
            case TEXTURE_3X3_FILTER:
                mGPUImageFilter = new GPUImage3x3TextureSamplingFilter();
                break;
            case ADD_BLEND_FILTER:
                mGPUImageFilter = new GPUImageAddBlendFilter();
//.........代碼過多,在文章後面會放上github 地址,可以去copy

3:通過Filter設置想要的效果展示出來

Bitmap gpuImage1 = GPUImageUtil.getGPUImage(gpuImage, oldBitmap, filter);
gpuImageView.setImage(gpuImage1);
  • Step 4: 部分使用效果

在這裏插入圖片描述
圖片有點小,湊合着看吧
最後附上Android 最全的效果對應工具類:

package com.example.myapplication;

import jp.co.cyberagent.android.gpuimage.filter.GPUImage3x3ConvolutionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImage3x3TextureSamplingFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageAddBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageAlphaBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageBoxBlurFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageBrightnessFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageBulgeDistortionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageCGAColorspaceFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageChromaKeyBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageColorBurnBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageColorDodgeBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageColorInvertFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageContrastFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageCrosshatchFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageDarkenBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageDifferenceBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageDilationFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageDissolveBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageDivideBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageEmbossFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageExclusionBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageExposureFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageFalseColorFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageGammaFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageGaussianBlurFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageGlassSphereFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageGrayscaleFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageHalftoneFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageHardLightBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageHazeFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageHighlightShadowFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageHueFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageKuwaharaFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageLevelsFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageLightenBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageLookupFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageLuminanceThresholdFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageMonochromeFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageMultiplyBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageNonMaximumSuppressionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageNormalBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageOpacityFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageOverlayBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImagePosterizeFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageRGBDilationFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageRGBFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSaturationFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageScreenBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSharpenFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSketchFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSmoothToonFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSobelEdgeDetectionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSoftLightBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSourceOverBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSphereRefractionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSubtractBlendFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageSwirlFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageThresholdEdgeDetectionFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageToneCurveFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageToonFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageTransformFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageVignetteFilter;
import jp.co.cyberagent.android.gpuimage.filter.GPUImageWhiteBalanceFilter;

public class GPUFilter {
   
   
    public static final int FAST_GAUSSIAN_BLUR_FILTER = 1;//高斯模糊
    public static final int BOX_BLUR_FILTER = 2;//盒裝模糊
    public static final int CONVOLUTION_3X3_FILTER = 3;//3x3卷積,高亮大色塊變黑,加亮邊緣、線條等
    public static final int TEXTURE_3X3_FILTER = 4;
    public static final int ADD_BLEND_FILTER = 5;// 通常用於創建兩個圖像之間的動畫變亮模糊效果
    public static final int ALPHA_BLEND_FILTER = 6; //透明混合,通常用於在背景上應用前景的透明度
    public static final int BRIGHTNESS_FILTER = 7;//亮度
    public static final int EXPOSURE_FILTER = 8;//曝光
    public static final int CONTRAST_FILTER = 9;//對比度
    public static final int SATURATION_FILTER = 10;//飽和度
    public static final int GAMMA_FILTER = 11;//伽馬
    public static final int BULGE_DISTORTION_FILTER = 12;//凸起失真,魚眼效果
    public static final int CGA_COLOR_SPACE_FILTER = 13;//CGA色彩濾鏡,形成黑、淺藍、紫色塊的畫面
    public static final int CHROMA_KEY_BLENDF_ILTER = 14;//色度鍵混合
    public static final int COLOR_BURN_BLEND_FILTER = 15;//色彩加深混合
    public static final int COLOR_DODGE_BLEND_FILTER = 16;//色彩減淡混合
    public static final int COLOR_INVERT_FILTER = 17;//反色
    public static final int CROSS_HATCH_FILTER = 18;//交叉線陰影,形成黑白網狀畫面
    public static final int DARKEN_BLEND_FILTER = 19;//加深混合,通常用於重疊類型
    public static final int DIFFERENCE_BLEND_FILTER = 20;//差異混合,通常用於創建更多變動的顏色
    public static final int DILATION_FILTER = 21;//擴展邊緣模糊,變黑白
    public static final int DISSOLVE_BLEND_FILTER = 22;//溶解
    public static final int DIVIDE_BLEND_FILTER = 23;//通常用於創建兩個圖像之間的動畫變暗模糊效果
    public static final int EMBOSS_FILTER = 24;//浮雕效果,帶有點3d的感覺
    public static final int EXCLUSION_BLEND_FILTER = 25;//排除混合
    public static final int FALSE_COLOR_FILTER = 26;//色彩替換(替換亮部和暗部色彩)
    public static final int GLASS_SPHERE_FILTER = 27;//水晶球效果
    public static final int GRAYS_CALE_FILTER = 28;//灰度
    public static final int HALF_TONE_FILTER = 29;//點染,圖像黑白化,由黑點構成原圖的大致圖形
    public static final int HARD_LIGHT_BLEND_FILTER = 30;//強光混合,通常用於創建陰影效果
    public static final int HAZE_FILTER = 31;//朦朧加暗
    public static final int HIGH_LIGHT_SHADOW_FILTER = 32;//提亮陰影
    public static final int HUE_FILTER = 33;//色度
    public static final int KUWAHARA_FILTER = 34;//桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時間比較長,慎用
    public static final int LEVELS_FILTER = 35;//色階
    public static final int LIGHTEN_BLEND_FILTER = 36;//減淡混合,通常用於重疊類型
    public static final int LOOKUP_FILTER = 37;//lookup 色彩調整
    public static final int LUMINANCE_THRESHOLD_FILTER = 38;//亮度閾
    public static final int MONO_CHROME_FILTER = 39;//單色
    public static final int MULTIPLY_BLEND_FILTER = 40;//通常用於創建陰影和深度效果
    public static final int NONMAXIMUM_SUPPRESSION_FILTER = 41;//非最大抑制,只顯示亮度最高的像素,其他爲黑
    public static final int NORMAL_BLEND_FILTER = 42;//正常
    public static final int OPACITY_FILTER = 43;//不透明度
    public static final int OVERLAY_BLEND_FILTER = 44;//疊加,通常用於創建陰影效果
    public static final int POSTERIZE_FILTER = 45;//色調分離,形成噪點效果
    public static final int RGB_DILATION_FILTER = 46;//RGB擴展邊緣模糊,有色彩
    public static final int RGB_FILTER = 47;//RGB
    public static final int SCREEN_BLEND_FILTER = 48;//屏幕包裹,通常用於創建亮點和鏡頭眩光
    public static final int SHARPEN_FILTER = 49;//銳化
    public static final int SKETCH_FILTER = 50;//素描
    public static final int SMOOTH_TOON_FILTER = 51;//相比上面的效果更細膩,上面是粗曠的畫風
    public static final int SOBEL_EDGE_DETECTION_FILTER = 52;//Sobel邊緣檢測算法(白邊,黑內容,有點漫畫的反色效果)
    public static final int SOFT_LIGHT_BLEND_FILTER = 53;//柔光混合
    public static final int SOURCE_OVER_BLEND_FILTER = 54;//源混合
    public static final int SPHERE_REFRACTION_FILTER = 55;//球形折射,圖形倒立
    public static final int SUBTRACT_BLEND_FILTER = 56;//差值混合,通常用於創建兩個圖像之間的動畫變暗模糊效果
    public static final int SWIRL_FILTER = 57;//漩渦,中間形成捲曲的畫面
    public static final int THRESHOLD_EDGE_DETECTION_FILTER = 58;//閾值邊緣檢測(效果與上差別不大)
    public static final int TONE_CURVE_FILTER = 59;//色調曲線
    public static final int TOON_FILTER = 60;//卡通效果(黑色粗線描邊)
    public static final int TRANSFORM_FILTER = 61;//形狀變化
    public static final int VIGNETTE_FILTER = 62;//暈影,形成黑色圓形邊緣,突出中間圖像的效果
    public static final int WHITE_BALANCE_FILTER = 63;//白平衡

    public static GPUImageFilter getGPUImageFilter(int filerFlag) {
   
   
        GPUImageFilter mGPUImageFilter;
        switch (filerFlag) {
   
   
            default:
            case FAST_GAUSSIAN_BLUR_FILTER:
                mGPUImageFilter = new GPUImageGaussianBlurFilter();
                break;
            case BOX_BLUR_FILTER:
                mGPUImageFilter = new GPUImageBoxBlurFilter();
                break;
            case CONVOLUTION_3X3_FILTER:
                mGPUImageFilter = new GPUImage3x3ConvolutionFilter();
                break;
            case TEXTURE_3X3_FILTER:
                mGPUImageFilter = new GPUImage3x3TextureSamplingFilter();
                break;
            case ADD_BLEND_FILTER:
                mGPUImageFilter = new GPUImageAddBlendFilter();
                break;
            case ALPHA_BLEND_FILTER:
                mGPUImageFilter = new GPUImageAlphaBlendFilter();
                break;
            case BRIGHTNESS_FILTER:
                mGPUImageFilter = new GPUImageBrightnessFilter();
                break;
            case EXPOSURE_FILTER:
                mGPUImageFilter = new GPUImageExposureFilter();
                break;
            case CONTRAST_FILTER:
                mGPUImageFilter = new GPUImageContrastFilter();
                break;
            case SATURATION_FILTER:
                mGPUImageFilter = new GPUImageSaturationFilter();
                break;
            case GAMMA_FILTER:
                mGPUImageFilter = new GPUImageGammaFilter();
                break;
            case BULGE_DISTORTION_FILTER:
                mGPUImageFilter = new GPUImageBulgeDistortionFilter();
                break;
            case CGA_COLOR_SPACE_FILTER:
                mGPUImageFilter = new GPUImageCGAColorspaceFilter();
                break;
            case CHROMA_KEY_BLENDF_ILTER:
                mGPUImageFilter = new GPUImageChromaKeyBlendFilter();
                break;
            case COLOR_BURN_BLEND_FILTER:
                mGPUImageFilter = new GPUImageColorBurnBlendFilter();
                break;
            case COLOR_DODGE_BLEND_FILTER:
                mGPUImageFilter = new GPUImageColorDodgeBlendFilter();
                break;
            case COLOR_INVERT_FILTER:
                mGPUImageFilter = new GPUImageColorInvertFilter();
                break;
            case CROSS_HATCH_FILTER:
                mGPUImageFilter = new GPUImageCrosshatchFilter();
                break;
            case DARKEN_BLEND_FILTER:
                mGPUImageFilter = new GPUImageDarkenBlendFilter();
                break;
            case DIFFERENCE_BLEND_FILTER:
                mGPUImageFilter = new GPUImageDifferenceBlendFilter();
                break;
            case DILATION_FILTER:
                mGPUImageFilter = new GPUImageDilationFilter();
                break;
            case DISSOLVE_BLEND_FILTER:
                mGPUImageFilter = new GPUImageDissolveBlendFilter();
                break;
            case DIVIDE_BLEND_FILTER:
                mGPUImageFilter = new GPUImageDivideBlendFilter();
                break;
            case EMBOSS_FILTER:
                mGPUImageFilter = new GPUImageEmbossFilter();
                break;
            case EXCLUSION_BLEND_FILTER:
                mGPUImageFilter = new GPUImageExclusionBlendFilter();
                break;
            case FALSE_COLOR_FILTER:
                mGPUImageFilter = new GPUImageFalseColorFilter();
                break;
            case GLASS_SPHERE_FILTER:
                mGPUImageFilter = new GPUImageGlassSphereFilter();
                break;
            case GRAYS_CALE_FILTER:
                mGPUImageFilter = new GPUImageGrayscaleFilter();
                break;
            case HALF_TONE_FILTER:
                mGPUImageFilter = new GPUImageHalftoneFilter();
                break;
            case HARD_LIGHT_BLEND_FILTER:
                mGPUImageFilter = new GPUImageHardLightBlendFilter();
                break;
            case HAZE_FILTER:
                mGPUImageFilter = new GPUImageHazeFilter();
                break;
            case HIGH_LIGHT_SHADOW_FILTER:
                mGPUImageFilter = new GPUImageHighlightShadowFilter();
                break;
            case HUE_FILTER:
                mGPUImageFilter = new GPUImageHueFilter();
                break;
            case KUWAHARA_FILTER:
                mGPUImageFilter = new GPUImageKuwaharaFilter();
                break;
            case LEVELS_FILTER:
                mGPUImageFilter = new GPUImageLevelsFilter();
                break;
            case LIGHTEN_BLEND_FILTER:
                mGPUImageFilter = new GPUImageLightenBlendFilter();
                break;
            case LOOKUP_FILTER:
                mGPUImageFilter = new GPUImageLookupFilter();
                break;
            case LUMINANCE_THRESHOLD_FILTER:
                mGPUImageFilter = new GPUImageLuminanceThresholdFilter();
                break;
            case MONO_CHROME_FILTER:
                mGPUImageFilter = new GPUImageMonochromeFilter();
                break;
            case MULTIPLY_BLEND_FILTER:
                mGPUImageFilter = new GPUImageMultiplyBlendFilter();
                break;
            case NONMAXIMUM_SUPPRESSION_FILTER:
                mGPUImageFilter = new GPUImageNonMaximumSuppressionFilter();
                break;
            case NORMAL_BLEND_FILTER:
                mGPUImageFilter = new GPUImageNormalBlendFilter();
                break;
            case OPACITY_FILTER:
                mGPUImageFilter = new GPUImageOpacityFilter();
                break;
            case OVERLAY_BLEND_FILTER:
                mGPUImageFilter = new GPUImageOverlayBlendFilter();
                break;
            case POSTERIZE_FILTER:
                mGPUImageFilter = new GPUImagePosterizeFilter();
                break;
            case RGB_DILATION_FILTER:
                mGPUImageFilter = new GPUImageRGBDilationFilter();
                break;
            case RGB_FILTER:
                mGPUImageFilter = new GPUImageRGBFilter();
                break;
            case SCREEN_BLEND_FILTER:
                mGPUImageFilter = new GPUImageScreenBlendFilter();
                break;
            case SHARPEN_FILTER:
                mGPUImageFilter = new GPUImageSharpenFilter();
                break;
            case SKETCH_FILTER:
                mGPUImageFilter = new GPUImageSketchFilter();
                break;
            case SMOOTH_TOON_FILTER:
                mGPUImageFilter = new GPUImageSmoothToonFilter();
                break;
            case SOBEL_EDGE_DETECTION_FILTER:
                mGPUImageFilter = new GPUImageSobelEdgeDetectionFilter();
                break;
            case SOFT_LIGHT_BLEND_FILTER:
                mGPUImageFilter = new GPUImageSoftLightBlendFilter();
                break;
            case SOURCE_OVER_BLEND_FILTER:
                mGPUImageFilter = new GPUImageSourceOverBlendFilter();
                break;
            case SPHERE_REFRACTION_FILTER:
                mGPUImageFilter = new GPUImageSphereRefractionFilter();
                break;
            case SUBTRACT_BLEND_FILTER:
                mGPUImageFilter = new GPUImageSubtractBlendFilter();
                break;
            case SWIRL_FILTER:
                mGPUImageFilter = new GPUImageSwirlFilter();
                break;
            case THRESHOLD_EDGE_DETECTION_FILTER:
                mGPUImageFilter = new GPUImageThresholdEdgeDetectionFilter();
                break;
            case TONE_CURVE_FILTER:
                mGPUImageFilter = new GPUImageToneCurveFilter();
                break;
            case TOON_FILTER:
                mGPUImageFilter = new GPUImageToonFilter();
                break;
            case TRANSFORM_FILTER:
                mGPUImageFilter = new GPUImageTransformFilter();
                break;
            case VIGNETTE_FILTER:
                mGPUImageFilter = new GPUImageVignetteFilter();
                break;
            case WHITE_BALANCE_FILTER:
                mGPUImageFilter = new GPUImageWhiteBalanceFilter();
                break;
        }

        return mGPUImageFilter;
    }

}

項目github地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章