3

I want to blur a videoview which is playing a video from raw folder.

Blurring a imageview or a layout containing drawable background is possible using renderscript or libraries like Blurry. But how to blur a video? I tried methods like converting uri path of video to bitmap, video to thumbnail but didn't work.

Here is my code.

package com.example.myapplication

import android.graphics.BitmapFactory
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.widget.MediaController
import android.widget.VideoView

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val videoView = findViewById(R.id.videoView) as VideoView
    val mediaController = MediaController(this)
    mediaController.setAnchorView(videoView)
    val uri = Uri.parse("android.resource://" + packageName + "/" + R.raw.samplevideo)
    videoView.setMediaController(mediaController)
    videoView.setVideoURI(uri)
    videoView.requestFocus()
    videoView.start()

    var runnable = Runnable {


        var resultBmp = BlurBuilder.blur(this, BitmapFactory.decodeResource(resources, R.raw.samplevideo))
        var drawable = BitmapDrawable(resources, resultBmp)
        videoView.background = drawable

    }

    videoView.post(runnable)
}

}

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">


    <VideoView
            android:id="@+id/videoView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

</RelativeLayout>

BlurBuilder.kt

package com.example.myapplication;

import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;

object BlurBuilder {

private val BITMAP_SCALE = 0.6f
private val BLUR_RADIUS = 15f

fun blur(context: Context, image: Bitmap): Bitmap {
    val width = Math.round(image.width * BITMAP_SCALE)
    val height = Math.round(image.height * BITMAP_SCALE)

    val inputBitmap = Bitmap.createScaledBitmap(image, width, height, false)
    val outputBitmap = Bitmap.createBitmap(inputBitmap)

    val rs = RenderScript.create(context)

    val intrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs))
    val tmpIn = Allocation.createFromBitmap(rs, inputBitmap)
    val tmpOut = Allocation.createFromBitmap(rs, outputBitmap)

    intrinsicBlur.setRadius(BLUR_RADIUS)
    intrinsicBlur.setInput(tmpIn)
    intrinsicBlur.forEach(tmpOut)
    tmpOut.copyTo(outputBitmap)

    return outputBitmap
}

}

Please help me in blurring video view or relative layout containing the video view.

dilip
  • 63
  • 2
  • 10

0 Answers0