Android圖像處理之GPUImage for Android

GPUImage 是iOS下一個開源的基於GPU的圖像處理庫,提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡。GPUImage for Android是它在Android下的實現,同樣也是開源的,託管在Github上。

版本:android-gpuimage-1.1.1


Android模擬器上不支持OpenGL ES 2.0所以會報錯,可以選用Genymotion測試,或真機上運行。

引用
Caused by: java.lang.IllegalStateException: OpenGL ES 2.0 is not supported on this phone.

(1)使用自定義的ImageView
Xml代碼

<jp.co.cyberagent.android.gpuimage.GPUImageView
    android:id="@+id/gpuimage"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_gravity="center"
    android:layout_weight="1" />

Java代碼
mImageView.setFilter(new GPUImageSepiaFilter()); // sepia
mImageView.setFilter(new GPUImageGrayscaleFilter()); // gray
mImageView.setFilter(new GPUImageSharpenFilter()); // sharp
mImageView.setFilter(new GPUImageSobelEdgeDetection()); // edge
原圖

sepia後:


gray後:



sharp後:

edge後:



(2) 處理Assets中的文件

Java代碼
// 讀取圖像
AssetManager as = getAssets();
InputStream is = null;
Bitmap bitmap = null;
try {
    is = as.open("dog.jpg");
    bitmap = BitmapFactory.decodeStream(is);
    is.close();
} catch (IOException e) {
    Log.e("MainActivity", "Error");
}
 
// 使用GPUImage處理圖像
GPUImage gpuImage = new GPUImage(this);
gpuImage.setImage(bitmap);
gpuImage.setFilter(new GPUImageToonFilter());
bitmap = gpuImage.getBitmapWithFilterApplied();
 
// 在ImageView中顯示處理後的圖像
ImageView view = new ImageView(this);
view.setImageBitmap(bitmap);
setContentView(view);

(3)使用Photoshop的acv文件
Java代碼
// 讀取圖像
AssetManager as = getAssets();
InputStream is = null;
Bitmap bitmap = null;
try {
    is = as.open("dog.jpg");
    bitmap = BitmapFactory.decodeStream(is);
    is.close();
} catch (IOException e) {
    Log.e("MainActivity", "Error");
}

// 讀取Photoshop的acv文件
GPUImageToneCurveFilter filter = new GPUImageToneCurveFilter();
try {
    is = as.open("tone_curve.acv");
    filter.setFromCurveFileInputStream(is);
    is.close();
} catch (IOException e) {
    Log.e("MainActivity", "Error");
}

// 使用GPUImage處理圖像
GPUImage gpuImage = new GPUImage(self);
gpuImage.setImage(bitmap);
gpuImage.setFilter(filter);
bitmap = gpuImage.getBitmapWithFilterApplied();

// 在ImageView中顯示處理後的圖像
ImageView view = new ImageView(self);
view.setImageBitmap(bitmap);
setContentView(view);




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