質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

1760閲覧

surfaceviewを使用して撮影後、imageviewに表示したい

yu9718s

総合スコア9

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/23 05:06

編集2020/06/24 04:38

前提・実現したいこと

現在surfaceviewにカメラpreviewを表示しております。
写真を撮るとトーストを表示されるようにしているのですが、
次は撮った写真をimageviewで表示したいと考えています。

発生している問題・エラーメッセージ

写真を撮ってみると、トースト表示していることもあり
写真を撮れていることの確認とファイル名がとれていることがわかっております。
しかし、この後imageviewで表示するために
どうすればいいのかわかっておりません。
こちらはギャラリーを一度開く必要があるのでしょうか。それともファイル名が取得できてさえいればそのまま表示できるのでしょうか。

該当のソースコード

MainActivity

1import android.Manifest.permission.CAMERA 2import android.Manifest.permission.WRITE_EXTERNAL_STORAGE 3import android.app.AlertDialog 4import android.content.ContentValues 5import android.content.Intent 6import android.content.pm.PackageManager 7import android.hardware.Camera 8import android.net.Uri 9import android.os.Build 10import android.os.Bundle 11import android.os.Environment 12import android.provider.MediaStore 13import android.view.SurfaceHolder 14import android.view.SurfaceView 15import android.view.View 16import android.widget.Button 17import android.widget.ImageView 18import android.widget.Toast 19import androidx.appcompat.app.AppCompatActivity 20import androidx.core.app.ActivityCompat 21import androidx.core.content.ContextCompat 22import java.io.File 23import java.io.FileNotFoundException 24import java.io.FileOutputStream 25import java.io.IOException 26import java.util.* 27 28class MainActivity : AppCompatActivity(), SurfaceHolder.Callback, Camera.PictureCallback { 29 30 private var surfaceHolder: SurfaceHolder? = null 31 private var camera: Camera? = null 32 33 private var surfaceView: SurfaceView? = null 34 35 private val neededPermissions = arrayOf(CAMERA, WRITE_EXTERNAL_STORAGE) 36 37 private var _imageUri: Uri? = null 38 39 override fun onCreate(savedInstanceState: Bundle?) { 40 super.onCreate(savedInstanceState) 41 setContentView(R.layout.activity_main) 42 43 surfaceView = findViewById(R.id.surfaceView) 44 val result = checkPermission() 45 if (result) { 46 setupSurfaceHolder() 47 } 48 } 49// public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 50// super.onActivityResult(requestCode, resultCode, data) 51// if(requestCode == 200 && resultCode == RESULT_OK) { 52// 53// 54// } 55// } 56 57 private fun checkPermission(): Boolean { 58 val currentAPIVersion = Build.VERSION.SDK_INT 59 if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) { 60 val permissionsNotGranted = ArrayList<String>() 61 for (permission in neededPermissions) { 62 if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { 63 permissionsNotGranted.add(permission) 64 } 65 } 66 if (permissionsNotGranted.size > 0) { 67 var shouldShowAlert = false 68 for (permission in permissionsNotGranted) { 69 shouldShowAlert = ActivityCompat.shouldShowRequestPermissionRationale(this, permission) 70 } 71 72 val arr = arrayOfNulls<String>(permissionsNotGranted.size) 73 val permissions = permissionsNotGranted.toArray(arr) 74 if (shouldShowAlert) { 75 showPermissionAlert(permissions) 76 } else { 77 requestPermissions(permissions) 78 } 79 return false 80 } 81 } 82 return true 83 } 84 85 private fun showPermissionAlert(permissions: Array<String?>) { 86 val alertBuilder = AlertDialog.Builder(this) 87 alertBuilder.setCancelable(true) 88 alertBuilder.setTitle(R.string.permission_required) 89 alertBuilder.setMessage(R.string.permission_message) 90 alertBuilder.setPositiveButton(android.R.string.yes) { _, _ -> requestPermissions(permissions) } 91 val alert = alertBuilder.create() 92 alert.show() 93 } 94 95 private fun requestPermissions(permissions: Array<String?>) { 96 ActivityCompat.requestPermissions(this@MainActivity, permissions, REQUEST_CODE) 97 } 98 99 override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) { 100 when (requestCode) { 101 REQUEST_CODE -> { 102 for (result in grantResults) { 103 if (result == PackageManager.PERMISSION_DENIED) { 104 Toast.makeText(this@MainActivity, R.string.permission_warning, Toast.LENGTH_LONG).show() 105 View.VISIBLE.setViewVisibility(R.id.showPermissionMsg) 106 return 107 } 108 } 109 110 setupSurfaceHolder() 111 } 112 } 113 super.onRequestPermissionsResult(requestCode, permissions, grantResults) 114 } 115 116 private fun Int.setViewVisibility(id: Int) { 117 val view = findViewById<View>(id) 118 view!!.visibility = this 119 } 120 121 private fun setupSurfaceHolder() { 122 View.VISIBLE.setViewVisibility(R.id.startBtn) 123 View.VISIBLE.setViewVisibility(R.id.surfaceView) 124 125 surfaceHolder = surfaceView!!.holder 126 surfaceHolder!!.addCallback(this) 127 setBtnClick() 128 } 129 130 private fun setBtnClick() { 131 val startBtn = findViewById<Button>(R.id.startBtn) 132 startBtn?.setOnClickListener { captureImage() } 133 } 134 135 private fun captureImage() { 136 if (camera != null) { 137 camera!!.takePicture(null, null, this) 138 } 139 } 140 141 override fun surfaceCreated(surfaceHolder: SurfaceHolder) { 142 startCamera() 143 } 144 145 private fun startCamera() { 146 camera = Camera.open() 147 camera!!.setDisplayOrientation(90) 148 try { 149 camera!!.setPreviewDisplay(surfaceHolder) 150 camera!!.startPreview() 151 } catch (e: IOException) { 152 e.printStackTrace() 153 } 154 155 } 156 157 override fun surfaceChanged(surfaceHolder: SurfaceHolder, i: Int, i1: Int, i2: Int) { 158 resetCamera() 159 } 160 161 private fun resetCamera() { 162 if (surfaceHolder!!.surface == null) { 163 // Return if preview surface does not exist 164 return 165 } 166 167 // Stop if preview surface is already running. 168 camera!!.stopPreview() 169 try { 170 // Set preview display 171 camera!!.setPreviewDisplay(surfaceHolder) 172 } catch (e: IOException) { 173 e.printStackTrace() 174 } 175 176 // Start the camera preview... 177 camera!!.startPreview() 178 } 179 180 override fun surfaceDestroyed(surfaceHolder: SurfaceHolder) { 181 releaseCamera() 182 } 183 184 private fun releaseCamera() { 185 camera!!.stopPreview() 186 camera!!.release() 187 camera = null 188 } 189 190 override fun onPictureTaken(bytes: ByteArray, camera: Camera) { 191 saveImage(bytes) 192 resetCamera() 193 } 194 195 private fun saveImage(bytes: ByteArray) { 196 val outStream: FileOutputStream 197 try { 198 val fileName = "TUTORIALWING_" + System.currentTimeMillis() + ".jpg" 199 val file = File(Environment.getExternalStorageDirectory(), fileName) 200 201 202 203 val values = ContentValues() 204 values.put(MediaStore.Images.Media.TITLE, fileName) 205 values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") 206 _imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) 207// val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) 208 intent.putExtra(MediaStore.EXTRA_OUTPUT, _imageUri) 209// startActivityForResult(intent, 200) 210 211 outStream = FileOutputStream(file) 212 outStream.write(bytes) 213 outStream.close() 214 Toast.makeText(this@MainActivity, "Picture Saved: $fileName", Toast.LENGTH_LONG).show() 215 216 val ivCamera = findViewById<ImageView>(R.id.ivCamera) 217 ivCamera.setImageURI(_imageUri) 218 219 } catch (e: FileNotFoundException) { 220 e.printStackTrace() 221 } catch (e: IOException) { 222 e.printStackTrace() 223 } 224 } 225 226 companion object { 227 const val REQUEST_CODE = 100 228 } 229}

xml

1<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:app="http://schemas.android.com/apk/res-auto" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical"> 7 8 <SurfaceView 9 android:id="@+id/surfaceView" 10 android:layout_width="match_parent" 11 android:layout_height="match_parent" 12 android:visibility="gone" /> 13 14 <Button 15 android:id="@+id/startBtn" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:layout_gravity="center_horizontal|bottom" 19 android:text="@string/take_photo" 20 android:visibility="gone" /> 21 22 <TextView 23 android:id="@+id/showPermissionMsg" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:layout_gravity="center" 27 android:padding="@dimen/show_permission_padding" 28 android:text="@string/permission_message" 29 android:textAlignment="center" 30 android:textStyle="bold|italic" 31 android:visibility="gone" /> 32 33 <ImageView 34 android:id="@+id/ivCamera" 35 android:layout_width="match_parent" 36 android:layout_height="match_parent" 37 android:layout_gravity="center" 38 android:scaleType="center"/> 39 40</FrameLayout>

試したこと

以前、撮った写真をただimageviewに表示するには
setImageURIを使えば解決しておりましたが、
今回はこちらを追加しても何も変化が起きませんでした。
何が足りていないのか、もしくは場所を間違えているのか
ご教示願えないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Bitmapを使用することで解決しました

投稿2020/06/26 07:57

yu9718s

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問