@@ -11,6 +11,7 @@ import androidx.compose.foundation.clickable
11
11
import androidx.compose.foundation.gestures.detectTapGestures
12
12
import androidx.compose.foundation.layout.Arrangement
13
13
import androidx.compose.foundation.layout.Column
14
+ import androidx.compose.foundation.layout.Row
14
15
import androidx.compose.foundation.layout.aspectRatio
15
16
import androidx.compose.foundation.layout.fillMaxSize
16
17
import androidx.compose.foundation.layout.fillMaxWidth
@@ -31,17 +32,22 @@ import androidx.compose.runtime.remember
31
32
import androidx.compose.runtime.rememberCoroutineScope
32
33
import androidx.compose.runtime.setValue
33
34
import androidx.compose.ui.Modifier
35
+ import androidx.compose.ui.draw.drawWithCache
34
36
import androidx.compose.ui.draw.drawWithContent
35
37
import androidx.compose.ui.draw.shadow
36
38
import androidx.compose.ui.geometry.Offset
37
39
import androidx.compose.ui.geometry.Rect
38
40
import androidx.compose.ui.geometry.Size
41
+ import androidx.compose.ui.graphics.BlendMode
39
42
import androidx.compose.ui.graphics.Color
43
+ import androidx.compose.ui.graphics.ColorFilter
44
+ import androidx.compose.ui.graphics.ColorMatrix
40
45
import androidx.compose.ui.graphics.ImageBitmap
41
46
import androidx.compose.ui.graphics.PathEffect
42
47
import androidx.compose.ui.graphics.asAndroidBitmap
43
48
import androidx.compose.ui.graphics.asImageBitmap
44
49
import androidx.compose.ui.graphics.drawscope.Stroke
50
+ import androidx.compose.ui.graphics.layer.drawLayer
45
51
import androidx.compose.ui.graphics.rememberGraphicsLayer
46
52
import androidx.compose.ui.input.pointer.pointerInput
47
53
import androidx.compose.ui.platform.LocalDensity
@@ -444,3 +450,73 @@ fun createParticles(imageBitmap: ImageBitmap, particleSize: Int): List<TestParti
444
450
445
451
return particleList
446
452
}
453
+
454
+ @Preview
455
+ @Composable
456
+ fun InversePixelsSample () {
457
+ Column (modifier = Modifier .fillMaxSize().padding(16 .dp)) {
458
+
459
+ androidx.compose.material3.Text (
460
+ text = " Original Colors" ,
461
+ fontSize = 34 .sp,
462
+ modifier = Modifier .padding(vertical = 16 .dp)
463
+ )
464
+
465
+ Row {
466
+ Image (
467
+ modifier = Modifier .weight(1f ).aspectRatio(1f ),
468
+ painter = painterResource(R .drawable.avatar_1_raster),
469
+ contentDescription = null
470
+ )
471
+ Image (
472
+ modifier = Modifier .weight(1f ).aspectRatio(1f ),
473
+ painter = painterResource(R .drawable.avatar_2_raster),
474
+ contentDescription = null
475
+ )
476
+ }
477
+
478
+ androidx.compose.material3.Text (
479
+ text = " Inverted Colors" ,
480
+ fontSize = 34 .sp,
481
+ modifier = Modifier .padding(vertical = 16 .dp)
482
+ )
483
+
484
+ Row (
485
+ modifier = Modifier
486
+ .drawWithCache {
487
+ val graphicsLayer = obtainGraphicsLayer()
488
+
489
+ val values = floatArrayOf(
490
+ - 1f , 0f , 0f , 0f , 255f ,
491
+ 0f , - 1f , 0f , 0f , 255f ,
492
+ 0f , 0f , - 1f , 0f , 255f ,
493
+ 0f , 0f , 0f , 1f , 0f
494
+ )
495
+
496
+ graphicsLayer.apply {
497
+ record {
498
+ drawContent()
499
+ }
500
+ blendMode = BlendMode .Difference
501
+ colorFilter = ColorFilter .colorMatrix(ColorMatrix (values))
502
+ }
503
+
504
+ onDrawWithContent {
505
+ drawLayer(graphicsLayer)
506
+ }
507
+ }
508
+ ) {
509
+ Image (
510
+ modifier = Modifier .weight(1f ).aspectRatio(1f ),
511
+ painter = painterResource(R .drawable.avatar_1_raster),
512
+ contentDescription = null
513
+ )
514
+ Image (
515
+ modifier = Modifier .weight(1f ).aspectRatio(1f ),
516
+ painter = painterResource(R .drawable.avatar_2_raster),
517
+ contentDescription = null
518
+ )
519
+ }
520
+
521
+ }
522
+ }
0 commit comments