У меня есть несколько эффектов фильтра изображений в Photoshop, которые содержат Color Blend, Color balance, Curve, Level и Channel Mixer.Все, что я могу достичь с помощью Android GPUImage, за исключением Channel Mixer, я не вижу никакой реализации для него из библиотеки.У кого-нибудь есть идеи, как имитировать микшер каналов?Заранее большое спасибо!
Редактировать :
Эффект, как показано ниже
Только Channel Mixer. Я не знаю, как это сделать с Android GPUImage, другие, как Curve, Color Fill, Color Balance и Level I, с Android GPUImage, как показано ниже:
class GPUImageVintageLook(context: Context) : GPUImageFilterGroup() {
private val colorFilter1 = GPUFilterUtils.createColorBlendFilter(
GPUImageExclusionBlendFilter::class.java,
Color.rgb(11, 5, 43)
)
private val colorFilter2 = GPUFilterUtils.createColorBlendFilter(
GPUImageMultiplyBlendFilter::class.java,
Color.rgb(255, 234, 197)
)
private val curve = GPUImageToneCurveFilter().apply {
setFromCurveFileInputStream(context.resources.openRawResource(R.raw.tone_curve_vintage_look))
}
private val colorBalance = GPUImageColorBalanceFilter().apply {
setMidtones(floatArrayOf(13f/100, -12f/100, -5f/100))
setHighlights(floatArrayOf(-2f/100, -5f/100, 1f/100))
setShowdows(floatArrayOf(8f/100, -8f/100, -5f/100))
}
private val channelMixer = GPUImageFilter().apply {
//This is just empty filter, I don't know how to achieve
}
private val colorFilter3 = GPUFilterUtils.createColorBlendFilter(
GPUImageSoftLightBlendFilter::class.java,
Color.rgb(242, 236, 174)
)
private val level = GPUImageLevelsFilter().apply {
setMin(22f, 1f, 244f, 0f, 255f)
}
private val colorFilter4 = GPUFilterUtils.createColorBlendFilter(
GPUImageLightenBlendFilter::class.java,
Color.rgb(112, 50, 87)
)
init {
addFilter(colorFilter1)
addFilter(colorFilter2)
addFilter(curve)
addFilter(colorBalance)
addFilter(channelMixer) // Missing this
addFilter(colorFilter3)
addFilter(level)
addFilter(colorFilter4)
}
}
Цветblend:
fun createColorBlendFilter(
filterClass: Class<out GPUImageTwoInputFilter>,
inColor: Int? = null
): GPUImageFilter {
return try {
filterClass.newInstance()
.apply {
if (inColor != null) {
bitmap = createColorBitmap(inColor)
}
}
} catch (e: Exception) {
e.printStackTrace()
GPUImageFilter()
}
}
fun createColorBitmap(color: Int) : Bitmap {
return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888).apply {
eraseColor(color)
}
}
Я тестировал другие фильтры, работающие так же, как Photoshop, когда включал и выключал каждый из них.Просто нужен последний микшер канала.