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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

Q&A

解決済

1回答

548閲覧

androidの中に保存している画像を読み込みたい

syosinsya109

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

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

0グッド

0クリップ

投稿2022/12/25 05:44

編集2022/12/26 08:02

前提

androidについて質問します。
以下の動画をもとにプログラムを組んだのですが、パス名が間違えているからか正常に動作しません。画像ファイルを扱ったことがないため調べながら検証しているのですがうまくいきません。
catchの方にしか行きません
以下が参考動画です
https://www.youtube.com/watch?v=8-MOTyaoe_0

実現したいこと

androidの中に保存している画像を読み込みたい

該当のソースコード

build.gradle

1 implementation 'com.google.android.gms:play-services-vision:20.1.3'

AndroidManifest.xml

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 2 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

mainActivity.java

1import android.Manifest; 2import android.app.Activity; 3import android.content.pm.PackageManager; 4import android.graphics.Bitmap; 5import android.graphics.BitmapFactory; 6import android.os.Bundle; 7import android.util.SparseArray; 8import android.view.View; 9import android.widget.EditText; 10import android.widget.ImageView; 11import android.widget.TextView; 12 13import androidx.appcompat.app.AppCompatActivity; 14import androidx.core.app.ActivityCompat; 15 16import com.google.android.gms.vision.Frame; 17import com.google.android.gms.vision.text.TextBlock; 18import com.google.android.gms.vision.text.TextRecognizer; 19 20public class MainActivity extends AppCompatActivity { 21 22 private TextView textView; 23 private EditText editText; 24 private ImageView imageView; 25 public Bitmap bitmap; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_main); 31 32 ActivityCompat.requestPermissions(this, 33 new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, 34 Manifest.permission.WRITE_EXTERNAL_STORAGE}, 35 PackageManager.PERMISSION_GRANTED); 36 37 textView = findViewById(R.id.textView); 38 editText = findViewById(R.id.editText); 39 imageView = findViewById(R.id.imageView); 40 } 41 42 public void buttonReadText(View view){ 43 try { 44 String stringFileName = "/storage/emulater/0/Download/" + editText.getText().toString(); 45 bitmap = BitmapFactory.decodeFile(stringFileName); 46 47 imageView.setImageBitmap(bitmap); 48 49 TextRecognizer textRecognizer = new TextRecognizer.Builder(this).build(); 50 51 Frame frameImage = new Frame.Builder().setBitmap(bitmap).build(); 52 53 SparseArray<TextBlock> textBlockSparseArray = textRecognizer.detect(frameImage); 54 55 String stringImageText = ""; 56 for(int i=0; i<textBlockSparseArray.size(); i++){ 57 TextBlock textBlock = textBlockSparseArray.get(textBlockSparseArray.keyAt(i)); 58 59 stringImageText = stringImageText + " " + textBlock.getValue(); 60 } 61 62 textView.setText(stringImageText); 63 64 }catch (Exception e){ 65 textView.setText("Failed"); 66 } 67 } 68}

activity_main.xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <Button 10 android:id="@+id/button" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:layout_marginTop="196dp" 14 android:text="Button" 15 android:onClick="buttonReadText" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintHorizontal_bias="0.498" 18 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintTop_toTopOf="parent" /> 20 21 <EditText 22 android:id="@+id/editText" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:layout_marginTop="92dp" 26 android:ems="10" 27 android:inputType="textPersonName" 28 app:layout_constraintEnd_toEndOf="parent" 29 app:layout_constraintHorizontal_bias="0.497" 30 app:layout_constraintStart_toStartOf="parent" 31 app:layout_constraintTop_toTopOf="parent" /> 32 33 <TextView 34 android:id="@+id/textView" 35 android:layout_width="wrap_content" 36 android:layout_height="wrap_content" 37 android:layout_marginTop="120dp" 38 android:text="TextView" 39 app:layout_constraintEnd_toEndOf="parent" 40 app:layout_constraintHorizontal_bias="0.498" 41 app:layout_constraintStart_toStartOf="parent" 42 app:layout_constraintTop_toBottomOf="@+id/button" /> 43 44 <ImageView 45 android:id="@+id/imageView" 46 android:layout_width="251dp" 47 android:layout_height="197dp" 48 app:layout_constraintBottom_toBottomOf="parent" 49 app:layout_constraintEnd_toEndOf="parent" 50 app:layout_constraintStart_toStartOf="parent" 51 app:layout_constraintTop_toBottomOf="@+id/textView" 52 app:srcCompat="@drawable/ic_launcher_background" /> 53 54 55</androidx.constraintlayout.widget.ConstraintLayout>

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

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

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

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

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

jimbe

2022/12/26 04:39 編集

>パス名が間違えているからか 動画の最終的に動作している状態のパスと比較してみてください。 >catchの方にしか行きません catch した例外を表示する等して何が起きているのか確認してください。
syosinsya109

2022/12/26 08:01

コメントありがとうございます。 catchのところでSystem.out.println(e);をしたところ、 java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference と言うエラーでした。 Frame frameImage = new Frame.Builder().setBitmap(bitmap).build(); の行が原因らしいです。 動画を見返したところパス名のstorageのsがおおもじになっていたらしく、それを編集してもなお直りません。 画像のパスはあっているはずです。
jimbe

2022/12/26 08:34

> Frame frameImage = new Frame.Builder().setBitmap(bitmap).build(); > の行が原因らしい setBitmap() した bitmap が null になっているようです。 bitmap が取れているか一応確認すると良いかもしれません。 >動画を見返したところパス名のstorageのsがおおもじになっていた 動画では一度大文字で書いてすぐ直していましたね。 ですが、 > 画像のパスはあっているはずです というのは、思い込みが入っていると思います。 人の記憶は実は一瞬で簡単に上書きされます。犯罪の容疑者の目撃者でも、容疑者の写真を見せられた時にある程度似ていると、目撃の記憶が写真で上書きされてしまって分からなくなるそうです。 パスを1文字づつ見るように、確実に確認してみてください。
syosinsya109

2022/12/26 09:54

できました! ファイル階層を間違えていました。 一つ質問なのですが、このアプリでは画面全体の文字が読み込まれてしまいます。 読み込む範囲を決めるにはどのようにしたらいいのでしょうか。
jimbe

2022/12/26 11:37

> 読み込む範囲を決めるには すみません、 TextRecognizer は使ったことがありませんので…。 多分 TextRecognizer への設定とか、そもそもの画像をトリミングしておくとかそういう感じになるのではと思います。
syosinsya109

2022/12/26 11:42

なるほど、わかりました。 ベストアンサーを推したいので、簡単でいいので回答をお願いしてもよろしいでしょうか
jimbe

2022/12/26 11:48

どのように直されたのか分かりませんが^^;;;
syosinsya109

2022/12/26 11:57

アドバイスだけでもありがたかったです! ありがとうございました!
guest

回答1

0

ベストアンサー

パスを1文字づつ見るように、確実に確認してみてください。

投稿2022/12/26 11:49

jimbe

総合スコア12632

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問