1.前提・実現したいこと
コンポジット合成の処理を速くしたいのですが、下記のソースコードで
実現ができたのですが、処理時間を短くしたいです。
2.ソースコード
kotlin
1//コンポジット合成 2 private fun composite(srcImg1 : Bitmap , srcImg2 : Bitmap) : Bitmap { 3 // 画像 4 var dstImg1 : Bitmap = Bitmap.createBitmap(srcImg1.width, srcImg1.height, Bitmap.Config.ARGB_8888) 5 6 // 高さ・幅 7 val width1 : Int = dstImg1.width 8 val height1 : Int = dstImg1.height 9 10 // 照度 11 var rgb1 : Int 12 var gray1 : Int 13 var rgb2 : Int 14 var gray2 : Int 15 16 // コンポジット合成 明るい方を採用 17 for(j in 0..height1 - 1 step 1) { 18 for (i in 0..width1 - 1 step 1) { 19 rgb1 = srcImg1.getPixel(i, j) 20 rgb2 = srcImg2.getPixel(i, j) 21 gray1 = (Color.red(rgb1) * 0.3 + Color.green(rgb1) * 0.59 + Color.blue(rgb1) * 0.11).toInt() 22 gray2 = (Color.red(rgb2) * 0.3 + Color.green(rgb2) * 0.59 + Color.blue(rgb2) * 0.11).toInt() 23 if (gray1 >= gray2){ 24 dstImg1.setPixel(i, j, Color.rgb(Color.red(rgb1), Color.green(rgb1), Color.blue(rgb1))) 25 }else{ 26 dstImg1.setPixel(i, j, Color.rgb(Color.red(rgb2), Color.green(rgb2), Color.blue(rgb2))) 27 } 28 } 29 } 30 return dstImg1 31 }
3.処理にかかる時間
端末1:P10
画像サイズ:6048 * 3402 = 20575296
処理時間:17984msec 約17秒 ※上記関数を挟んで時間を計測
ざっくり1ピクセルの処理にかかる時間: 0.874msec
端末2:oppo
画像サイズ:4608 * 2592 = 11943936
処理時間:14119msec 約14秒 ※上記関数を挟んで時間を計測
ざっくり1ピクセルの処理にかかる時間: 1.18msec
画像サイズ/処理時間で算出
4.質問
forで高さ方向、幅方向を回すので画像サイズが大きくなるとかなり時間がかかります。
この時間をできれば1/10に縮めたいと考えていますが、何か他の方法はないでしょうか?
###5.試したこと
他に方法が思いつかず、ネットで他の方法を探したのですが、見つけることができなく、
このサイトで質問です。
6.補足情報(FW/ツールのバージョンなど)
Android Studio 3.6.3
言語:kotlin
ベースにしたもの:Camera2Basic (kotlin)
端末1:P10
端末2:oppo A5 2020
最後に
何か情報をお持ちの方、またはこれ試して、などコメントを頂けると大変助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー