gpuimage for android,android-gpuimage

GPUImage for Android

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d417061636865253230322d626c75652e737667

68747470733a2f2f6170692e62696e747261792e636f6d2f7061636b616765732f636174732d6f73732f6d6176656e2f677075696d6167652f696d616765732f646f776e6c6f61642e737667

68747470733a2f2f6170702e626974726973652e696f2f6170702f643864383039306137313036366537632f7374617475732e7376673f746f6b656e3d734a4e62765838436b656357635541355a3839386c51266272616e63683d6d6173746572

Goal is to have something as similar to GPUImage as possible. Vertex and fragment shaders are exactly the same. That way it makes it easier to port filters from GPUImage iOS to Android.

Requirements

Android 2.2 or higher (OpenGL ES 2.0)

Usage

Gradle dependency

repositories {

jcenter()

}

dependencies {

implementation 'jp.co.cyberagent.android:gpuimage:2.x.x'

}

Sample Code

With preview:

Java:

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity);

Uri imageUri = ...;

gpuImage = new GPUImage(this);

gpuImage.setGLSurfaceView((GLSurfaceView) findViewById(R.id.surfaceView));

gpuImage.setImage(imageUri); // this loads image on the current thread, should be run in a thread

gpuImage.setFilter(new GPUImageSepiaFilter());

// Later when image should be saved saved:

gpuImage.saveToPictures("GPUImage", "ImageWithFilter.jpg", null);

}

Kotlin:

public override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_gallery)

val imageUri: Uri = ...

gpuImage = GPUImage(this)

gpuImage.setGLSurfaceView(findViewById(R.id.surfaceView))

gpuImage.setImage(imageUri) // this loads image on the current thread, should be run in a thread

gpuImage.setFilter(GPUImageSepiaFilter())

// Later when image should be saved saved:

gpuImage.saveToPictures("GPUImage", "ImageWithFilter.jpg", null)

}

Using GPUImageView

android:id="@+id/gpuimageview"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:gpuimage_show_loading="false"

app:gpuimage_surface_type="texture_view" />

Java:

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity);

Uri imageUri = ...;

gpuImageView = findViewById(R.id.gpuimageview);

gpuImageView.setImage(imageUri); // this loads image on the current thread, should be run in a thread

gpuImageView.setFilter(new GPUImageSepiaFilter());

// Later when image should be saved saved:

gpuImageView.saveToPictures("GPUImage", "ImageWithFilter.jpg", null);

}

Kotlin:

public override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_gallery)

val imageUri: Uri = ...

gpuImageView = findViewById(R.id.gpuimageview)

gpuImageView.setImage(imageUri) // this loads image on the current thread, should be run in a thread

gpuImageView.setFilter(GPUImageSepiaFilter())

// Later when image should be saved saved:

gpuImageView.saveToPictures("GPUImage", "ImageWithFilter.jpg", null)

}

Without preview:

Java:

public void onCreate(final Bundle savedInstanceState) {

public void onCreate(final Bundle savedInstanceState) {

Uri imageUri = ...;

gpuImage = new GPUImage(context);

gpuImage.setFilter(new GPUImageSobelEdgeDetection());

gpuImage.setImage(imageUri);

gpuImage.saveToPictures("GPUImage", "ImageWithFilter.jpg", null);

}

Kotlin:

public override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_gallery)

val imageUri: Uri = ...

gpuImage = GPUImage(this)

gpuImage.setFilter(GPUImageSepiaFilter())

gpuImage.setImage(imageUri)

gpuImage.saveToPictures("GPUImage", "ImageWithFilter.jpg", null)

}

Support status of GPUImage for iOS shaders

Saturation

Contrast

Brightness

Levels

Exposure

RGB

RGB Diation

Hue

White Balance

Monochrome

False Color

Sharpen

Unsharp Mask

Transform Operation

Crop

Gamma

Highlights and Shadows

Haze

Sepia Tone

Amatorka

Miss Etikate

Soft Elegance

Color Inversion

Solarize

Vibrance

Highlight and Shadow Tint

Luminance

Luminance Threshold

Average Color

Average Luminance

Average Luminance Threshold

Adaptive Threshold

Polar Pixellate

Pixellate

Polka Dot

Halftone

Crosshatch

Sobel Edge Detection

Prewitt Edge Detection

Canny Edge Detection

Threshold Sobel EdgeDetection

Harris Corner Detector

Noble Corner Detector

Shi Tomasi Feature Detector

Colour FAST Feature Detector

Low Pass Filter

High Pass Filter

Sketch Filter

Threshold Sketch Filter

Toon Filter

SmoothToon Filter

Tilt Shift

CGA Colorspace Filter

Posterize

Convolution 3x3

Emboss Filter

Laplacian

Chroma Keying

Kuwahara Filter

Kuwahara Radius3 Filter

Vignette

Gaussian Blur

Box Blur

Bilateral Blur

Motion Blur

Zoom Blur

iOS Blur

Median Filter

Swirl Distortion

Bulge Distortion

Pinch Distortion

Sphere Refraction

Glass Sphere Refraction

Stretch Distortion

Dilation

Erosion

Opening Filter

Closing Filter

Local Binary Pattern

Color Local Binary Pattern

Dissolve Blend

Chroma Key Blend

Add Blend

Divide Blend

Multiply Blend

Overlay Blend

Lighten Blend

Darken Blend

Color Burn Blend

Color Dodge Blend

Linear Burn Blend

Screen Blend

Difference Blend

Subtract Blend

Exclusion Blend

HardLight Blend

SoftLight Blend

Color Blend

Hue Blend

Saturation Blend

Luminosity Blend

Normal Blend

Source Over Blend

Alpha Blend

Non Maximum Suppression

Thresholded Non Maximum Suppression

Directional Non Maximum Suppression

Opacity

Weak Pixel Inclusion Filter

Color Matrix

Directional Sobel Edge Detection

Lookup

Tone Curve (*.acv files)

Others

Texture 3x3

Gray Scale

Gradle

Make sure that you run the clean target when using maven.

gradle clean assemble

License

Copyright 2018 CyberAgent, Inc.

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值