@@ -15,8 +15,13 @@ import androidx.lifecycle.*
1515import androidx.palette.graphics.Palette
1616import dagger.hilt.android.lifecycle.HiltViewModel
1717import id.zelory.compressor.Compressor
18- import kotlinx.coroutines.*
19- import kotlinx.coroutines.flow.*
18+ import kotlinx.coroutines.Dispatchers
19+ import kotlinx.coroutines.Job
20+ import kotlinx.coroutines.flow.SharingStarted
21+ import kotlinx.coroutines.flow.StateFlow
22+ import kotlinx.coroutines.flow.stateIn
23+ import kotlinx.coroutines.launch
24+ import kotlinx.coroutines.withContext
2025import me.rosuh.easywatermark.BuildConfig
2126import me.rosuh.easywatermark.MyApp
2227import me.rosuh.easywatermark.R
@@ -26,15 +31,16 @@ import me.rosuh.easywatermark.data.repo.UserConfigRepository
2631import me.rosuh.easywatermark.data.repo.WaterMarkRepository
2732import me.rosuh.easywatermark.ui.widget.WaterMarkImageView
2833import me.rosuh.easywatermark.utils.FileUtils.Companion.outPutFolderName
29- import me.rosuh.easywatermark.utils.bitmap.*
34+ import me.rosuh.easywatermark.utils.bitmap.calculateInSampleSize
35+ import me.rosuh.easywatermark.utils.bitmap.decodeBitmapFromUri
36+ import me.rosuh.easywatermark.utils.bitmap.decodeSampledBitmapFromResource
3037import me.rosuh.easywatermark.utils.ktx.applyConfig
3138import me.rosuh.easywatermark.utils.ktx.formatDate
3239import me.rosuh.easywatermark.utils.ktx.launch
3340import java.io.File
3441import java.io.FileNotFoundException
3542import java.io.FileOutputStream
3643import javax.inject.Inject
37- import kotlin.math.ceil
3844
3945@HiltViewModel
4046class MainViewModel @Inject constructor(
@@ -82,6 +88,7 @@ class MainViewModel @Inject constructor(
8288
8389 private val tmpDrawableBounds by lazy { Rect () }
8490 private val drawableBounds by lazy { RectF () }
91+ var matrixValues = FloatArray (9 )
8592 private val tmpSrcBounds by lazy { RectF () }
8693 private val tmpDstBounds by lazy { RectF () }
8794
@@ -177,24 +184,22 @@ class MainViewModel @Inject constructor(
177184 )
178185 imageInfo.width = mutableBitmap.width
179186 imageInfo.height = mutableBitmap.height
180- if (waterMark.value == null ) {
181- return @withContext Result .failure(
182- null ,
183- code = " -1" ,
184- message = " config.value == null"
185- )
186- }
187+ val tmpConfig = waterMark.value ? : return @withContext Result .failure(
188+ null ,
189+ code = " -1" ,
190+ message = " config.value == null"
191+ )
187192 imageInfo.inSample = inSample
188193 val canvas = Canvas (mutableBitmap)
189- val tmpConfig = waterMark.value !!
190- // generate matrxi of drawable
191- val imageMatrix = generateMatrix(
192- viewInfo,
193- ceil((imageInfo.width.toDouble() / imageInfo.inSample)).toInt() ,
194- ceil((imageInfo.height.toDouble() / imageInfo.inSample)).toInt() ,
195- tmpDrawableBounds ,
196- tmpSrcBounds ,
197- tmpDstBounds
194+ // generate matrix of drawable
195+ val imageMatrix = WaterMarkImageView .adjustMatrix(
196+ Matrix (),
197+ viewInfo.width ,
198+ viewInfo.height ,
199+ viewInfo.paddingLeft ,
200+ viewInfo.paddingTop ,
201+ imageInfo.width ,
202+ imageInfo.height
198203 )
199204 Log .i(
200205 " generateImage" ,
@@ -207,17 +212,10 @@ class MainViewModel @Inject constructor(
207212 bitmapH = ${mutableBitmap.height} ,
208213 """ .trimIndent()
209214 )
210- // map to drawable bounds
211- imageMatrix.mapRect(drawableBounds, RectF (tmpDrawableBounds))
212- drawableBounds.set(
213- drawableBounds.left + viewInfo.paddingLeft,
214- drawableBounds.top + viewInfo.paddingTop,
215- drawableBounds.right + viewInfo.paddingRight,
216- drawableBounds.bottom + viewInfo.paddingBottom,
217- )
218215 // calculate the scale factor
219- imageInfo.scaleX = mutableBitmap.width.toFloat() / drawableBounds.width()
220- imageInfo.scaleY = mutableBitmap.height.toFloat() / drawableBounds.height()
216+ imageMatrix.getValues(matrixValues)
217+ imageInfo.scaleX = 1 / matrixValues[Matrix .MSCALE_X ]
218+ imageInfo.scaleY = 1 / matrixValues[Matrix .MSCALE_X ]
221219 val bitmapPaint = TextPaint ().applyConfig(imageInfo, tmpConfig, isScale = false )
222220 val layoutPaint = Paint ()
223221 layoutPaint.shader = when (waterMark.value?.markMode) {
0 commit comments