Как я могу сохранить изображение ImageView в хранилище, которое окрашено с помощью colorFilter? - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно сохранить отредактированные изображения. Я подал заявку на редактирование ColorFilter (https://medium.com/over-engineering/manipulating-images-and-drawables-with-androids-colorfilter-25bf061843e7), который работает и отображается в ImageView. Следующим шагом является сохранение этих изображений. Чтобы сохранить его, я использую это:

val wrapper = ContextWrapper(applicationContext)
var imagesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
var projectDir = File(imagesDir, UUID.randomUUID().toString())
projectDir.mkdirs()

var image = File(projectDir, "$name.jpg")

try
{
    val stream: OutputStream = FileOutputStream(image)
    ImageContainer.convertImageViewToBitmap(imageViewSuccess).compress(Bitmap.CompressFormat.JPEG, 100, stream)
    stream.flush()
    stream.close()
}
catch (e: IOException)
{
    e.printStackTrace()
}
[...]

но примененный ColorFilter не сохраняется вместе с ним, если я использую функцию 3. Функция 2 устарела. Функция 1 использует фильтры, но также масштабирует изображение и не работает, если ImageView не виден.

//1
fun convertImageViewToBitmap(view: ImageView): Bitmap
{
    val bitmap = Bitmap.createBitmap(
        view.width,
        view.height, Bitmap.Config.ARGB_8888
    )
    val canvas = Canvas(bitmap)
    view.draw(canvas)
    return bitmap

    return bitmap
}
//2
fun convertImageViewToBitmap(v: ImageView): Bitmap
{
    v.isDrawingCacheEnabled = true
    val bitmap = Bitmap.createBitmap(v.getDrawingCache())
    v.isDrawingCacheEnabled = false

    return bitmap
}
//3
fun convertImageViewToBitmap(v: ImageView): Bitmap
{
    return (v.drawable as BitmapDrawable).bitmap
}

Как я могу использовать ColorFilter на растровом изображении и сохранить его в хранилище?

...