Fast image filtering on Android with Renderscript. A cleaner rewrite of Lätt https://oppenlab.net/pr/light/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Oppenlab 41ab9a35fa add demo 1 week ago
.idea :: 1 week ago
app add demo 1 week ago
gradle/wrapper options recycler experiemnts 1 week ago
lib options recycler experiemnts 1 week ago
.gitignore fix gitig 1 week ago
LICENSE Initial commit 1 week ago
README.md readme 1 week ago
build.gradle :: 1 week ago
gradle.properties :: 1 week ago
gradlew :: 1 week ago
gradlew.bat :: 1 week ago
settings.gradle :: 1 week ago

README.md

Light

** Note - this is under early development and is non-functional. **

A follow-up/sequel to Lätt. Lätt produces fantastic images (I still use it daily) but the user experience never really got as polished as it needed to be for a production app. The code was written without any thought given to architecture and there's a fair amount of debt. In addition to this Google recently released an improved Google Photos editing experience which showcases some much more fluid ways of editing photos on a mobile device. This project aims to both produce more maintainable code, and also create a much simpler UX than Lätt.

Architecture

Any and all image processing will take place in the lib module. The app module will contain... the app.

App module

At least aim for something MVVM-like, and use Android's (relatively) new ViewModel, and View and Data binding API.

Lib module

Lätt had a PhotoProcessor God-object, only 200 lines but still it did far too much. Light has a very simple ImageProcessor which takes a Bitmap and list of Filter implementations. Each filter implementation can fully encapsulate a single image processing technique: applying a LUT, contrast, brightness, or even some 1bit dithering techniques. This hopefully means that while any individual process can be a debt-ridden mess the overall 'cyclomatic complexity' can be kept low.

I couldn't resist adding the ImageProcessor to a Bitmap extension function:

aBitmap.process(filters){ result ->
    //...
}