@@ -9,7 +9,6 @@ import android.content.Context
99import android.content.Intent
1010import android.graphics.Bitmap
1111import android.graphics.Canvas
12- import android.graphics.Matrix
1312import android.graphics.Paint
1413import android.net.Uri
1514import android.os.Build
@@ -59,9 +58,7 @@ import me.rosuh.easywatermark.data.repo.MemorySettingRepo
5958import me.rosuh.easywatermark.data.repo.TemplateRepository
6059import me.rosuh.easywatermark.data.repo.UserConfigRepository
6160import me.rosuh.easywatermark.data.repo.WaterMarkRepository
62- import me.rosuh.easywatermark.ui.widget.WaterMarkImageView
6361import me.rosuh.easywatermark.utils.FileUtils.Companion.outPutFolderName
64- import me.rosuh.easywatermark.utils.bitmap.calculateInSampleSize
6562import me.rosuh.easywatermark.utils.bitmap.decodeBitmapFromUri
6663import me.rosuh.easywatermark.utils.bitmap.decodeSampledBitmapFromResource
6764import me.rosuh.easywatermark.utils.ktx.applyConfig
@@ -137,7 +134,6 @@ class MainViewModel (
137134
138135 val colorPalette: MutableLiveData <Palette > = MutableLiveData ()
139136
140- private var matrixValues = FloatArray (9 )
141137
142138 private var _viewInfoStateFlow : MutableStateFlow <ViewInfo > = MutableStateFlow (ViewInfo .Empty )
143139
@@ -216,7 +212,6 @@ class MainViewModel (
216212
217213 fun saveImage (
218214 contentResolver : ContentResolver ,
219- viewInfo : ViewInfo ,
220215 imageList : List <ImageInfo >,
221216 ) {
222217 viewModelScope.launch {
@@ -226,7 +221,7 @@ class MainViewModel (
226221 }
227222 saveResult.value =
228223 Result .success(null , code = TYPE_SAVING )
229- val result = generateList(contentResolver, viewInfo, imageList)
224+ val result = generateList(contentResolver, imageList)
230225 if (result.isFailure()) {
231226 saveResult.value = Result .failure(null , code = TYPE_ERROR_FILE_NOT_FOUND )
232227 return @launch
@@ -238,7 +233,6 @@ class MainViewModel (
238233
239234 private suspend fun generateList (
240235 contentResolver : ContentResolver ,
241- viewInfo : ViewInfo ,
242236 infoList : List <ImageInfo >? ,
243237 ): Result <List <ImageInfo >> =
244238 withContext(Dispatchers .Default ) {
@@ -249,7 +243,7 @@ class MainViewModel (
249243 try {
250244 info.jobState = JobState .Ing
251245 launch(Dispatchers .Main ) { saveProcess.value = info }
252- info.result = generateImage(contentResolver, viewInfo, info)
246+ info.result = generateImage(contentResolver, info)
253247 info.jobState = JobState .Success (info.result!! )
254248 launch(Dispatchers .Main ) { saveProcess.value = info }
255249 } catch (fne: FileNotFoundException ) {
@@ -271,7 +265,6 @@ class MainViewModel (
271265
272266 private suspend fun generateImage (
273267 contentResolver : ContentResolver ,
274- viewInfo : ViewInfo ,
275268 imageInfo : ImageInfo ,
276269 ): Result <Uri > =
277270 withContext(Dispatchers .IO ) {
@@ -286,46 +279,15 @@ class MainViewModel (
286279 message = " Copy bitmap from uri failed."
287280 )
288281
289- val inSample = calculateInSampleSize(
290- mutableBitmap.width,
291- mutableBitmap.height,
292- WaterMarkImageView .calculateDrawLimitWidth(viewInfo.width, viewInfo.paddingLeft),
293- WaterMarkImageView .calculateDrawLimitHeight(viewInfo.height, viewInfo.paddingRight),
294- )
295282 imageInfo.width = mutableBitmap.width
296283 imageInfo.height = mutableBitmap.height
297284 val tmpConfig = waterMark.value ? : return @withContext Result .failure(
298285 null ,
299286 code = " -1" ,
300287 message = " config.value == null"
301288 )
302- imageInfo.inSample = inSample
303289 val canvas = Canvas (mutableBitmap)
304- // generate matrix of drawable
305- val imageMatrix = WaterMarkImageView .adjustMatrix(
306- Matrix (),
307- viewInfo.width,
308- viewInfo.height,
309- viewInfo.paddingLeft,
310- viewInfo.paddingTop,
311- imageInfo.width,
312- imageInfo.height
313- )
314- Log .i(
315- " generateImage" ,
316- """
317- imageMatrix = $imageMatrix ,
318- inSample = $inSample ,
319- imageInfo = $imageInfo
320- viewInfo = $viewInfo ,
321- bitmapW = ${mutableBitmap.width}
322- bitmapH = ${mutableBitmap.height} ,
323- """ .trimIndent()
324- )
325- // calculate the scale factor
326- imageMatrix.getValues(matrixValues)
327- imageInfo.scaleX = 1 / matrixValues[Matrix .MSCALE_X ]
328- imageInfo.scaleY = 1 / matrixValues[Matrix .MSCALE_X ]
290+ // Export sizing is image-space; preview matrix values are not needed here.
329291 val bitmapPaint = TextPaint ().applyConfig(imageInfo, tmpConfig, isScale = false )
330292 val layoutPaint = Paint ()
331293 // S2a: build the cell shader through the Android renderer seam (same seam the preview
@@ -342,11 +304,12 @@ class MainViewModel (
342304 }
343305
344306 WaterMarkRepository .MarkMode .Image -> {
307+ // Decode the icon against source-image bounds so export is independent of preview size.
345308 val iconBitmapRect = decodeSampledBitmapFromResource(
346309 contentResolver,
347310 tmpConfig.iconUri,
348- viewInfo .width,
349- viewInfo .height
311+ imageInfo .width,
312+ imageInfo .height
350313 )
351314 if (iconBitmapRect.isFailure() || iconBitmapRect.data == null ) {
352315 return @withContext Result .failure(
0 commit comments