GPUImage 是iOS下一個開源的基於GPU的圖像處理庫,提供各種各樣的圖像處理濾鏡,並且支持照相機和攝像機的實時濾鏡。GPUImage for Android是它在Android下的實現,同樣也是開源的,託管在Github上。
版本:android-gpuimage-1.1.1
Android模擬器上不支持OpenGL ES 2.0所以會報錯,可以選用Genymotion測試,或真機上運行。
(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);