Implement exponential focal length mapping for background blur as described in 27_FIX_DOF.md

This commit is contained in:
2026-07-06 20:10:35 +07:00
parent a7a539b97f
commit 6636cdb418
2 changed files with 148 additions and 5 deletions
@@ -1664,7 +1664,8 @@ class MainActivity : AppCompatActivity() {
if (!isAiSupported) {
if (blurIntensity > 0f) {
val radius = (40 * blurIntensity).toInt().coerceIn(1, 40)
val opticalIntensity = Math.pow(blurIntensity.toDouble(), 2.5).toFloat()
val radius = (40 * opticalIntensity).toInt().coerceIn(1, 40)
return blurBitmap(capturedImage, radius)
}
return capturedImage
@@ -1723,7 +1724,8 @@ class MainActivity : AppCompatActivity() {
val bgPixels = IntArray(w * h)
var blurredBg: android.graphics.Bitmap? = null
if (blurIntensity > 0f) {
val radius = (25 * blurIntensity).toInt().coerceIn(1, 25)
val opticalIntensity = Math.pow(blurIntensity.toDouble(), 2.5).toFloat()
val radius = (25 * opticalIntensity).toInt().coerceIn(1, 25)
blurredBg = blurBitmap(baseBg, radius)
blurredBg.getPixels(bgPixels, 0, w, 0, 0, w, h)
} else {
@@ -1778,7 +1780,8 @@ class MainActivity : AppCompatActivity() {
}
if (blurIntensity > 0f) {
val radius = (25 * blurIntensity).toInt().coerceIn(1, 25)
val opticalIntensity = Math.pow(blurIntensity.toDouble(), 2.5).toFloat()
val radius = (25 * opticalIntensity).toInt().coerceIn(1, 25)
return blurBitmap(capturedImage, radius)
}
return capturedImage
@@ -1848,7 +1851,8 @@ class MainActivity : AppCompatActivity() {
val bgPixels = IntArray(w * h)
var blurredBg: android.graphics.Bitmap? = null
if (blurIntensity > 0f) {
val radius = (40 * blurIntensity).toInt().coerceIn(1, 40)
val opticalIntensity = Math.pow(blurIntensity.toDouble(), 2.5).toFloat()
val radius = (40 * opticalIntensity).toInt().coerceIn(1, 40)
blurredBg = blurBitmap(baseBg, radius)
blurredBg.getPixels(bgPixels, 0, w, 0, 0, w, h)
} else {
@@ -1903,7 +1907,8 @@ class MainActivity : AppCompatActivity() {
}
if (blurIntensity > 0f) {
val radius = (40 * blurIntensity).toInt().coerceIn(1, 40)
val opticalIntensity = Math.pow(blurIntensity.toDouble(), 2.5).toFloat()
val radius = (40 * opticalIntensity).toInt().coerceIn(1, 40)
return blurBitmap(capturedImage, radius)
}
return capturedImage