Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b0cd392

Browse files
add RenderScript sample
1 parent 7873b2b commit b0cd392

File tree

1 file changed

+132
-0
lines changed

1 file changed

+132
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
@file:Suppress("DEPRECATION")
2+
3+
package com.smarttoolfactory.tutorial1_1basics.chapter6_graphics
4+
5+
import android.content.Context
6+
import android.graphics.Bitmap
7+
import android.renderscript.Allocation
8+
import android.renderscript.Element
9+
import android.renderscript.RenderScript
10+
import android.renderscript.ScriptIntrinsicBlur
11+
import androidx.compose.foundation.Image
12+
import androidx.compose.foundation.layout.Column
13+
import androidx.compose.foundation.layout.aspectRatio
14+
import androidx.compose.foundation.layout.fillMaxSize
15+
import androidx.compose.foundation.layout.fillMaxWidth
16+
import androidx.compose.foundation.layout.padding
17+
import androidx.compose.foundation.rememberScrollState
18+
import androidx.compose.foundation.verticalScroll
19+
import androidx.compose.material3.Slider
20+
import androidx.compose.material3.Text
21+
import androidx.compose.runtime.Composable
22+
import androidx.compose.runtime.getValue
23+
import androidx.compose.runtime.mutableFloatStateOf
24+
import androidx.compose.runtime.mutableStateOf
25+
import androidx.compose.runtime.remember
26+
import androidx.compose.runtime.setValue
27+
import androidx.compose.ui.Modifier
28+
import androidx.compose.ui.graphics.ImageBitmap
29+
import androidx.compose.ui.graphics.asAndroidBitmap
30+
import androidx.compose.ui.graphics.asImageBitmap
31+
import androidx.compose.ui.layout.ContentScale
32+
import androidx.compose.ui.platform.LocalContext
33+
import androidx.compose.ui.res.imageResource
34+
import androidx.compose.ui.tooling.preview.Preview
35+
import androidx.compose.ui.unit.dp
36+
import com.smarttoolfactory.tutorial1_1basics.R
37+
import com.smarttoolfactory.tutorial1_1basics.ui.components.StyleableTutorialText
38+
import com.smarttoolfactory.tutorial1_1basics.ui.components.TutorialHeader
39+
import com.smarttoolfactory.tutorial1_1basics.ui.components.TutorialText2
40+
import kotlin.math.roundToInt
41+
42+
43+
@Preview
44+
@Composable
45+
fun Tutorial6_40Screen1() {
46+
TutorialContent()
47+
}
48+
49+
50+
@Composable
51+
private fun TutorialContent() {
52+
Column(modifier = Modifier.padding(8.dp)) {
53+
TutorialHeader(text = "RenderScript")
54+
StyleableTutorialText(
55+
text = "Blue Bitmap using **RenderScript**",
56+
bullets = false
57+
)
58+
RenderScriptBlursample()
59+
}
60+
}
61+
62+
@Preview
63+
@Composable
64+
private fun RenderScriptBlursample() {
65+
66+
Column(
67+
modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())
68+
) {
69+
70+
val imageBitmap = ImageBitmap.imageResource(R.drawable.landscape10)
71+
72+
var blurRadius by remember {
73+
mutableFloatStateOf(10f)
74+
}
75+
76+
val context = LocalContext.current
77+
78+
val blurredBitmap by remember(imageBitmap, blurRadius) {
79+
mutableStateOf(blurBitmap(context, imageBitmap.asAndroidBitmap(), blurRadius))
80+
}
81+
82+
TutorialText2(text = "Default")
83+
84+
Image(
85+
modifier = Modifier.fillMaxWidth().aspectRatio(3 / 2f),
86+
bitmap = imageBitmap,
87+
contentDescription = null,
88+
contentScale = ContentScale.FillBounds
89+
)
90+
91+
92+
TutorialText2(text = "Blurred")
93+
Image(
94+
modifier = Modifier.fillMaxWidth().aspectRatio(3 / 2f),
95+
bitmap = blurredBitmap.asImageBitmap(),
96+
contentDescription = null,
97+
contentScale = ContentScale.FillBounds
98+
)
99+
100+
101+
Text("Blur radius: ${blurRadius.roundToInt()}")
102+
103+
Slider(
104+
modifier = Modifier.padding(horizontal = 16.dp),
105+
value = blurRadius,
106+
onValueChange = {
107+
blurRadius = it
108+
},
109+
valueRange = 0.01f..25f
110+
)
111+
}
112+
}
113+
114+
fun blurBitmap(context: Context, bitmap: Bitmap, blurRadius: Float): Bitmap {
115+
116+
val bitmapToBlur = bitmap.copy(Bitmap.Config.ARGB_8888, true)
117+
118+
val renderScript = RenderScript.create(context)
119+
val input = Allocation.createFromBitmap(renderScript, bitmapToBlur)
120+
val output = Allocation.createTyped(renderScript, input.type)
121+
122+
ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript)).apply {
123+
setRadius(blurRadius)
124+
setInput(input)
125+
forEach(output)
126+
}
127+
128+
output.copyTo(bitmapToBlur)
129+
renderScript.destroy()
130+
131+
return bitmapToBlur
132+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /