Android GPUImage濾鏡效果
阿新 • • 發佈:2018-12-01
先附上一張效果圖:
第一步:新增依賴
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
第二步:程式碼
public class MainActivity extends AppCompatActivity { private GPUImage mGPUimage; private ImageView resultIv; private SeekBar seekbar; private Bitmap mBitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); seekbar.setMax(100); new Thread(new Runnable() { @Override public void run() { try { mBitmap = Picasso.with(MainActivity.this).load(R.mipmap.jisu_wuyifan_01).get(); resultIv.setImageBitmap(mBitmap); } catch (IOException e) { e.printStackTrace(); } } }).start(); seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //進度條的值改變 resultIv.setImageBitmap(getGPUinageFromAssets(progress,mBitmap)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } public Bitmap getGPUinageFromAssets(int progress,Bitmap bitmap){ // 使用GPUImage處理影象 mGPUimage = new GPUImage(this); mGPUimage.setImage(bitmap); //設定飽和度 mGPUimage.setFilter(new GPUImageSaturationFilter(progress)); bitmap = mGPUimage.getBitmapWithFilterApplied(); return bitmap; } private void initView() { resultIv = (ImageView) findViewById(R.id.resultIv); seekbar = (SeekBar) findViewById(R.id.seekbar); } }
佈局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <ImageView android:id="@+id/resultIv" android:layout_gravity="center" android:layout_width="300dp" android:layout_height="300dp" /> <SeekBar android:id="@+id/seekbar" android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
如果你想實現不同的功能,比如亮度,對比度,灰度,可以參照下面的API:
"GPUImageBrightnessFilter" //亮度 "GPUImageExposureFilter" //曝光 "GPUImageContrastFilter" //對比度 "GPUImageSaturationFilter" //飽和度 "GPUImageGammaFilter" //伽馬線 "GPUImageColorInvertFilter" //反色 "GPUImageSepiaFilter" //褐色(懷舊) "GPUImageLevelsFilter" //色階 "GPUImageGrayscaleFilter" //灰度 "GPUImageHistogramFilter" //色彩直方圖,顯示在圖片上 "GPUImageHistogramGenerator" //色彩直方圖 "GPUImageRGBFilter" //RGB "GPUImageToneCurveFilter" //色調曲線 "GPUImageMonochromeFilter" //單色 "GPUImageOpacityFilter" //不透明度 "GPUImageHighlightShadowFilter" //提亮陰影 "GPUImageFalseColorFilter" //色彩替換(替換亮部和暗部色彩) "GPUImageHueFilter" //色度 "GPUImageChromaKeyFilter" //色度鍵 "GPUImageWhiteBalanceFilter" //白平橫 "GPUImageAverageColor" //畫素平均色值 "GPUImageSolidColorGenerator" //純色 "GPUImageLuminosity" //亮度平均 "GPUImageAverageLuminanceThresholdFilter" //畫素色值亮度平均,影象黑白(有類似漫畫效果) "GPUImageLookupFilter" //lookup 色彩調整 "GPUImageAmatorkaFilter" //Amatorka lookup "GPUImageMissEtikateFilter" //MissEtikate lookup "GPUImageSoftEleganceFilter" //SoftElegance lookup "GPUImageCrosshairGenerator" //十字 "GPUImageLineGenerator" //線條 "GPUImageTransformFilter" //形狀變化 "GPUImageCropFilter" //剪裁 "GPUImageSharpenFilter" //銳化 "GPUImageUnsharpMaskFilter" //反遮罩銳化 // "GPUImageFastBlurFilter" //模糊 "GPUImageGaussianBlurFilter" //高斯模糊 "GPUImageGaussianSelectiveBlurFilter" //高斯模糊,選擇部分清晰 "GPUImageBoxBlurFilter" //盒狀模糊 "GPUImageTiltShiftFilter" //條紋模糊,中間清晰,上下兩端模糊 "GPUImageMedianFilter" //中間值,有種稍微模糊邊緣的效果 "GPUImageBilateralFilter" //雙邊模糊 "GPUImageErosionFilter" //侵蝕邊緣模糊,變黑白 "GPUImageRGBErosionFilter" //RGB侵蝕邊緣模糊,有色彩 "GPUImageDilationFilter" //擴充套件邊緣模糊,變黑白 "GPUImageRGBDilationFilter" //RGB擴充套件邊緣模糊,有色彩 "GPUImageOpeningFilter" //黑白色調模糊 "GPUImageRGBOpeningFilter" //彩色模糊 "GPUImageClosingFilter" //黑白色調模糊,暗色會被提亮 "GPUImageRGBClosingFilter" //彩色模糊,暗色會被提亮 "GPUImageLanczosResamplingFilter" //Lanczos重取樣,模糊效果 "GPUImageNonMaximumSuppressionFilter" //非最大抑制,只顯示亮度最高的畫素,其他為黑 "GPUImageThresholdedNonMaximumSuppressionFilter" //與上相比,畫素丟失更多 "GPUImageSobelEdgeDetectionFilter" //Sobel邊緣檢測演算法(白邊,黑內容,有點漫畫的反色效果) "GPUImageCannyEdgeDetectionFilter" //Canny邊緣檢測演算法(比上更強烈的黑白對比度) "GPUImageThresholdEdgeDetectionFilter" //閾值邊緣檢測(效果與上差別不大) "GPUImagePrewittEdgeDetectionFilter" //普瑞維特(Prewitt)邊緣檢測(效果與Sobel差不多,貌似更平滑) "GPUImageXYDerivativeFilter" //XYDerivative邊緣檢測,畫面以藍色為主,綠色為邊緣,帶彩色 "GPUImageHarrisCornerDetectionFilter" //Harris角點檢測,會有綠色小十字顯示在圖片角點處 "GPUImageNobleCornerDetectionFilter" //Noble角點檢測,檢測點更多 "GPUImageShiTomasiFeatureDetectionFilter" //ShiTomasi角點檢測,與上差別不大 "GPUImageMotionDetector" //動作檢測 "GPUImageHoughTransformLineDetector" //線條檢測 "GPUImageParallelCoordinateLineTransformFilter" //平行線檢測 "GPUImageLocalBinaryPatternFilter" //影象黑白化,並有大量噪點 "GPUImageLowPassFilter" //用於影象加亮 "GPUImageHighPassFilter" //影象低於某值時顯示為黑 "GPUImageSketchFilter" //素描 "GPUImageThresholdSketchFilter" //閥值素描,形成有噪點的素描 "GPUImageToonFilter" //卡通效果(黑色粗線描邊) "GPUImageSmoothToonFilter" //相比上面的效果更細膩,上面是粗曠的畫風 "GPUImageKuwaharaFilter" //桑原(Kuwahara)濾波,水粉畫的模糊效果;處理時間比較長,慎用 "GPUImageMosaicFilter" //黑白馬賽克 "GPUImagePixellateFilter" //畫素化 "GPUImagePolarPixellateFilter" //同心圓畫素化 "GPUImageCrosshatchFilter" //交叉線陰影,形成黑白網狀畫面 "GPUImageColorPackingFilter" //色彩丟失,模糊(類似監控攝像效果) "GPUImageVignetteFilter" //暈影,形成黑色圓形邊緣,突出中間影象的效果 "GPUImageSwirlFilter" //漩渦,中間形成捲曲的畫面 "GPUImageBulgeDistortionFilter" //凸起失真,魚眼效果 "GPUImagePinchDistortionFilter" //收縮失真,凹面鏡 "GPUImageStretchDistortionFilter" //伸展失真,哈哈鏡 "GPUImageGlassSphereFilter" //水晶球效果 "GPUImageSphereRefractionFilter" //球形折射,圖形倒立 "GPUImagePosterizeFilter" //色調分離,形成噪點效果 "GPUImageCGAColorspaceFilter" //CGA色彩濾鏡,形成黑、淺藍、紫色塊的畫面 "GPUImagePerlinNoiseFilter" //柏林噪點,花邊噪點 "GPUImage3x3ConvolutionFilter" //3x3卷積,高亮大色塊變黑,加亮邊緣、線條等 "GPUImageEmbossFilter" //浮雕效果,帶有點3d的感覺 "GPUImagePolkaDotFilter" //畫素圓點花樣 "GPUImageHalftoneFilter" //點染,影象黑白化,由黑點構成原圖的大致圖形 "GPUImageMultiplyBlendFilter" //通常用於建立陰影和深度效果 "GPUImageNormalBlendFilter" //正常 "GPUImageAlphaBlendFilter" //透明混合,通常用於在背景上應用前景的透明度 "GPUImageDissolveBlendFilter" //溶解 "GPUImageOverlayBlendFilter" //疊加,通常用於建立陰影效果 "GPUImageDarkenBlendFilter" //加深混合,通常用於重疊型別 "GPUImageLightenBlendFilter" //減淡混合,通常用於重疊型別 "GPUImageSourceOverBlendFilter" //源混合 "GPUImageColorBurnBlendFilter" //色彩加深混合 "GPUImageColorDodgeBlendFilter" //色彩減淡混合 "GPUImageScreenBlendFilter" //螢幕包裹,通常用於建立亮點和鏡頭眩光 "GPUImageExclusionBlendFilter" //排除混合 "GPUImageDifferenceBlendFilter" //差異混合,通常用於建立更多變動的顏色 "GPUImageSubtractBlendFilter" //差值混合,通常用於建立兩個影象之間的動畫變暗模糊效果 "GPUImageHardLightBlendFilter" //強光混合,通常用於建立陰影效果 "GPUImageSoftLightBlendFilter" //柔光混合 "GPUImageChromaKeyBlendFilter" //色度鍵混合 "GPUImageMaskFilter" //遮罩混合 "GPUImageHazeFilter" //朦朧加暗 "GPUImageLuminanceThresholdFilter" //亮度閾 "GPUImageAdaptiveThresholdFilter" //自適應閾值 "GPUImageAddBlendFilter" //通常用於建立兩個影象之間的動畫變亮模糊效果 "GPUImageDivideBlendFilter" //通常用於建立兩個影象之間的動畫變暗模糊效果