/Native-Floyd-Steinberg-Dithering

Android library for native floyd steinberg dithering on bitmap

Primary LanguageC++MIT LicenseMIT

License

Native-Floyd-Steinberg-Dithering

Android library for floyd-steinberg dithering on bitmap using JNI/Cmake

Why FSD

For those who don't know the purpose of Floyd-Steinberg algorithm, it is a algorithm to turn color image to black and white(NOT GRAYSCALE).

When would we use this? Well, for those e-ink displays like Amazon Kindle, they can't display color images, and just black and white(see below) would still look bad, this is when this algorithm and library is usful.

I have tried using just java to run the algorithm, but it is slow. This library is small and easy to use. Ideally you should NOT run this not on the main thread.

Using FSD

Setup

	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
Dependencies
	dependencies {
		implementation 'com.github.jeffreyliu8.Native-Floyd-Steinberg-Dithering:release:1.1.5'
	}

The last working version is compile 'com.github.jeffreyliu8.Native-Floyd-Steinberg-Dithering:release:1.1.3'.

A quick example is shown below:

val original = BitmapFactory.decodeResource(resources, R.drawable.lena)
val fsBitmap = Utils().floydSteinbergDithering(original)

And for just black and white image:

val bwBitmap = Utils().binaryBlackAndWhite(original)

And for gray-scale image(This is just a simple java function):

val grayBitmap = Utils().toGrayscale(original)

Output sample

Requirements

Requires a minimum SDK version of 16 (14 should still work)