• 締切済み

【java】ファイル名から画像を取得

こんにちは。Androidアプリを開発しています。 さっそくですが、質問です。 現在、ファイル名から画像を取得するというコードを書いています。 コードは以下の通りです。 //取得したファイル名を格納 ArrayList<String> file; file = intent.getStringArrayListExtra("list"); //画像を格納する配列 Bitmap[] image = new Bitmap[file.size()]; //ファイル名から画像をとってくる for (int i = 0 ;  i < file.size() ;  i++ )  { image[i] = findImageByFilename(file.get(i)); } //ファイル名から画像をとってくるメソッド public Bitmap findImageByFilename (String file_name) { Bitmap image = null; try { image = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(file_name)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return image; } Logをとった結果、 try { の下の image = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(file_name)); でエラーが出ていることまではわかりました。 しかし、そこからどのようにすればいいのかがわかりません。 分かる方、ご回答お願い致します。

  • Java
  • 回答数1
  • ありがとう数7

みんなの回答

回答No.1

何てエラーが出てたか書いてくれたほうが早い

non-non53
質問者

補足

ご回答ありがとうございます。 エラーは FATAL EXCEPTION: main Process: example.〇〇, PID: 19122 java.lang.RuntimeException: Unable to start activity ComponentInfo{example.picpic1127/example.〇〇.ImageActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaDocumentsProvider uri content://com.android.providers.media.documents/document/image%3A310 from pid=19122, uid=10125 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission() です。 エラーの原因はなんとなくわかりました。 現在、 →データベースからファイル名を取得 →ファイル名からイメージを取得 と書いているのですが、 ファイル名からイメージを取得する際に ギャラリー内で既に消去されてしまった画像に アクセスするとエラーとなり、強制終了してしまうようです。 私がやりたかったのは、 →データベースからファイル名を取得 →ファイル名からイメージを取得 →取得できなかったイメージのファイル名をデータベースから削除 だったのですが、そもそもイメージが取得できないと 強制終了してしまうようです。 なにか良い方法はないでしょうか?

関連するQ&A

  • ファイル名の取得がうまくいきません

    <input type="file" name="ans4" /> で取得したファイル名を取得する方法がわかりません。 指定したファイル名とそのの画像が表示されるというHTMLプログラムですが、 そのような動作になりません。 確認のため、指定した画像ファイル名を直接書くと、その画像が表示されます。 <form name ="a"> 写真を指定してください:<input type="file" name="ans4" /><br> <IMG SRC = document.a.ans4.value WIDTH="120" HEIGHT="84"><br> document.write("指定したファイルは" + document.a.ans4.value); 確認用に画像を表示<br> <IMG SRC="testFig.jpg" WIDTH="120" HEIGHT="84"><br> </form>

  • ファイル名を

    あるフォルダ内に、実行ファイルと入力ファイルがあり、プログラムを実行すると、 1. 実行ファイルと同じフォルダ内にあるファイル名を文字型配列に格納する。 2. さらに拡張子が.txtのファイルをさがし、一覧を表示する。 3. 一覧から入力するファイルを選択する。 という動作をするプログラムを作成していますが、上記「1」の方法が分かりません。 下のソースは、既にファイル名を文字型配列に格納した後(「2」と「3」の動作)のものです。 「1」はどのようなソースコードにすればできるのでしょうか。 大変お手数ですが、ご存知の方教えてください。よろしくお願いします。 OS: Windows2000, コンパイラ: Borland C++ 5.5.1 for Win32 #include <stdio.h> #include <stdlib.h> #define num_files 4 #define max_words 10 int main(void){ int i,j,k,check[num_files],num_candidate,select_no; char file_name[num_files][max_words]={"aaa.txt","bbbb.csv","ccc.txt","ddd.txt"}; char candidate[num_files][max_words],txt[]="txt",infile[max_words]; printf("フォルダ内のファイル一覧\n"); for(i=0;i<num_files;i++){ printf("%s\n",file_name[i]); } printf("\n"); printf("拡張子 *.txt のファイル一覧\n"); for(i=0;i<num_files;i++){ check[i]=0; for(j=0;j<max_words;j++){ if(file_name[i][j]=='.'){ if(file_name[i][j+1]==txt[0] && file_name[i][j+2]==txt[1] && file_name[i][j+3]==txt[2] && file_name[i][j+4]=='\0'){ check[i]++; } } } } num_candidate=0; for(i=0;i<num_files;i++){ if(check[i] != 0){ for(j=0;j<max_words;j++){ candidate[num_candidate][j]=file_name[i][j]; if(file_name[i][j] == '\0'){ break; } } num_candidate++; } } for(i=0;i<num_candidate;i++){ printf("%2d. %s\n",i+1,candidate[i]); } printf("\n"); printf("入力ファイルの番号を選択してください: "); scanf("%d",&select_no); if(select_no<1 || select_no>num_candidate){ printf("入力した数字が不適合です。\n"); exit(1); } for(i=0;i<max_words;i++){ infile[i]=candidate[select_no-1][i]; if(candidate[select_no-1][i] == '\0') { break; } } printf("%s を選択しました。\n",infile); return 0; }

  • 3日で作るPHPの本で画像アップロードするには?

    3日で作るPHPの本で画像アップロードするには? フォーム内 画像 <input type="file" name="image" size="40"><br> 下記内容でファイル内に保存する $upload_file = date("ymdHis")."_".basename($_FILES["image"]["name"]); $upload_path = "<保存先のディレクトリ名>".$upload_file; $upload_url = "./images/".$upload_file; move_uploaded_file($_FILES["image"]["tmp_name"],$upload_path); 以上のように表記してありましたが、 表示の仕方が書いていなくどのように表記したよいのかサンプルなどで教えていただきたいです。 さらに上記のように保存先のディレクトリ名書を絶対相対パスで書いてみたのですが保存されませんでした。 どこを変更するとよいでしょうか

    • 締切済み
    • PHP
  • CSVファイルから画像名を取得し、表示する

    こんにちは!データバインドで、データをCSVファイルに格納しています。項目は色々あるのですが、その一つに画像名があります。これをhtmlに表示させる方法を教えてください。テキストを表示するだけなら<Td><span datafld="name" ></span></td>で表示できますが、<img src="">の""の中にCSVから取ってきた画像名を入れるのはどうすればいいのでしょうか?また、その画像を横3つおきに改行する方法があれば教えて下さい。 よろしくお願いいたします。

  • アーティスト名リストを取得するプログラムなのですが

    以下のプログラムは実行すると指定したディレクトリ下の複数のmp3ファイルからアーティスト名を取り出して表示するMainクラスのプログラムです。 例>指定したディレクトリ下にmp3ファイルが三つあり、アーティスト名が花子、次郎、花子で記されていたとすると花子、次郎、花子と表示されます。 この場合だと花子が2回表示されてしまうので同じアーティスト名の場合は重複しないように表示できるようプログラムを変更したいのですが上手く組み込むことができません(>_<) どの箇所を書き加えれば良いか教えてください。 import java.io.File; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.ArrayList; public class MP3FileListMain { /** * @param args * @throws UnsupportedEncodingException */ public static void main(String[] args) throws UnsupportedEncodingException { if(args.length < 1) { System.out.print("引数にディレクトリを指定して\n"); return; } File objFile = new File(args[0]); if(!objFile.isDirectory()) { System.out.print("引数に指定したのは、ディレクトリではない\n"); System.out.print("引数にディレクトリを指定して\n"); return; } FileList objFileList = new FileList(objFile); long lRnt = objFileList.getFileInfo(); // try { MP3Tag.init(); } catch (ClassNotFoundException e) { e.printStackTrace(); } MP3Tag.outputFiles(objFileList); } private static class MP3Tag { private static void init() throws ClassNotFoundException { } private static void outputFiles(FileList objFileList) { MP3File objMP3File; ArrayList objMP3List; // System.out.print(objFileList.getDir() + "\n"); Iterator iteMP3File = objFileList.getMP3FileIte(); while(iteMP3File.hasNext()) { objMP3File = (MP3File)iteMP3File.next(); try { objMP3List = objMP3File.getMP3Info(); } catch (Exception e) { e.printStackTrace(); return; } try { for(int i = 0; objMP3List.size() > i; i++) { MP3Info objMP3Info = (MP3Info)objMP3List.get(i); System.out.print(objMP3Info.getArtist() + ","); } } } catch (Exception e) { e.printStackTrace(); return; } } Iterator iteDir = objFileList.getDirIte(); while(iteDir.hasNext()) { outputFiles((FileList)iteDir.next()); } } } }

    • ベストアンサー
    • Java
  • RGB値の取得について(java)

    お世話になります。 Javaプログラム上で、指定した画像のRBG値を取得するプログラムを作りましたが、得られた値が思わしくありません。最終的にグレースケール化するためにRGB値を取得したいと考えています。 例えば、原画像の左上の画素のRGB値をgimpで確認すると、それぞれ200前後の値が、プログラムで返された値は50前後になってしまいます。 以下にソースを貼ります。とりあえず、100個の画素のRGB値を取得するように設定しています。まだjavaを勉強し始めて日が浅く、低レベルの質問かもしれませんが、解決策を教えていただける方、よろしくお願いいたします。 import java.io.*; import java.lang.*; import java.awt.*; import java.awt.color.ColorSpace; import java.awt.event.*; import javax.swing.*; import javax.imageio.ImageIO; import javax.media.*; import javax.media.control.*; import javax.media.format.*; import javax.media.util.*; import java.awt.image.*; import java.applet.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; import java.util.*; import java.text.*; public class Sample{ static BufferedImage image; public static void main(String[] args){ try { //画像ファイルのデータを読み込む image = ImageIO.read(new File("C:\\QR\\imagefile\\sa.bmp")); } catch (Exception e) { e.printStackTrace(); image = null; } int i,j; int width = image.getWidth(); int height = image.getHeight(); int gray[][] = new int[width][height]; for(i = 0;i < 1 ;i++){ for(j = 0;j < 100 ;j++){ int rgb = image.getRGB(j,i); rgb = 0-rgb; int b = rgb%256; System.out.print(" "+b); int g = (rgb/256)%256; System.out.print(" "+g); int r = rgb/256/256; System.out.print(" "+r); gray[j][i] = (int)((0.299*r + 0.587*g + 0.114*b)); } System.out.println(""); } } }

    • ベストアンサー
    • Java
  • Andorid tryで取得した画像表示について

    こんばんは ちょっと初心者には質問方法が難しいです。 Andoridアプリを勉強しながら作成しています。 ネット上から取得した画像を端末に表示しています。 (1)-------------------- 中略 try { URL url = new URL(photour2); InputStream input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 120, 160, true); getimg1.setImageBitmap(bitmap1);←【ここ】 } catch (Exception exx) { changeImageView = (ImageView)findViewById(R.id.imageView3); changeImageId = R.drawable.now; changeImageView.setImageResource(changeImageId); ex.printStackTrace(); } finally { } ex.printStackTrace(); } finally { } -------------------- を、 (2)-------------------- 中略 try { URL url = new URL(photour2); InputStream input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 120, 160, true); } catch (Exception exx) { ex.printStackTrace(); } finally { } ex.printStackTrace(); } finally { } 中略 if (bitmap1の判定){ getimg1.setImageBitmap(bitmap1);←【ここで表示させたい】 } else { changeImageView = (ImageView)findViewById(R.id.imageView3); changeImageId = R.drawable.now; changeImageView.setImageResource(changeImageId); } -------------------- (1)を(2)のように、tryしてその直後では無く、いろいろ処理してから表示させたいのですが、うまくいきません。 Java初心者で専門用語もわからず、質問方法もわからない状態です。 (1)ではうまく表示されています。 【開発環境】 Eclipse 【やった事】 ググりました沢山ヒットしますが目的の答えが見つかりませんでした。 (専門用語がわからないので、適切な検索とはいえませんが・・・・泣) 【質問・やりたい事】 (1)なんでtryの中で表示されていた画像が、外に出たら表示されないのですか? (2)どうやったら表示する事が出来ますか? 質問するにも低レベル過ぎて本当に失礼と思いますが、是非アドバイスと回答よろしくお願いたします

    • ベストアンサー
    • Java
  • 画像のupができません。

    お世話になっております。 PHPでCMSを組んでいるのですが、画像のUPロードがうまくいきません。 DBにはファイル名が登録されるのですが、画像ファイルが指定フォルダに入りません。 詳しい方、ご教授願います。 抜粋部分です。 Functionファイル内 function image($image, $folder, $options=array()){ if($image){ $option=getOptions($options); $img='<img src="'.$folder.$image.'"'.$option.'/>'; return $img; }else{ return "&nbsp;"; } } function uploadFile($data, $confirm=false, $options=array()){ if($confirm){ $file=hidden($data["name"],$data["value"]); }else{ $option=getOptions($options); $file='<input type="file" name="'.$data["name"].'"'.$option.'/>'; } return $file; } ソースコード部分 foreach ($imageList as $key => $title) { if(!empty($_FILES[$key]["tmp_name"])){ if($err == UPLOAD_ERR_OK){ if(isAllowedExtension($_FILES[$key]["name"],$allowedExtensions)) { if(isset($id)){ if($oldData[$key]!=$_FILES[$key]["name"] && file_exists(DIR_IMAGES.$_FILES[$key]["name"])){ $error=$_FILES[$key]["name"]."ファイルが存在します"; }else{ $new_img[$key]=$_FILES[$key]["name"]; move_uploaded_file($_FILES[$key]["tmp_name"],DIR_IMAGES."tmp.".$_FILES[$key]["name"]); } }else{ if(file_exists(DIR_IMAGES.$_FILES[$key]["name"])){ $error=$_FILES[$key]["name"]."ファイルが存在します"; }else{ $new_img[$key]=$_FILES[$key]["name"]; move_uploaded_file($_FILES[$key]["tmp_name"],DIR_IMAGES."tmp.".$_FILES[$key]["name"]); } } }else{ $error=$title.":画像ファイルを選択して下さい"; } }else{ $error=$title.":アップロードエラー。<br />"; } } } 登録部分 <td>&nbsp;<?php if(!$mode){?> <?php $file_data=array('name'=>"image_search", 'value'=>$new_img["image_search"]); echo uploadFile($file_data,$mode,array("size"=>'37'));?> <?php } //確認画面で新しい画像かどうか判断 if($new_img["image_search"]){ $image_search=$new_img["image_search"]; $rest = substr($image_search, 0, 4); if($rest=="tmp."){ $image_search=substr($image_search, 4, strlen($image_search)); } $image_file="tmp.".$image_search; echo hidden("new_img[image_search]", $image_search); }elseif($data['image_search']){ $image_search=$data["image_search"]; $image_file=$data["image_search"]; } echo hidden("data[image_search]", $image_search); if($image_search){ if(!$mode){?> <div class='clear'></div> <div class='title1 left'></div><?php }?> <?php } if($image_search){ if(!$mode){?> <div class='clear'></div> <div class='title1 left'></div><?php }?> <div class='img_name left'><?php echo $image_search;?></div> <div class='clear'></div> <div class='title1 left'></div> <div class='left'><?php echo image($image_file,DIR_IMAGES, array('border'=>"0",'style'=>"width: 100px"))?></div> <?php }?> </td> よろしくお願い致します。

    • 締切済み
    • PHP
  • [java] 画像ファイル名の取得方法がわかりません

    Image p1CARD = getImage(CodeBase(),"B1G.gif"); で画像ファイルを呼び出したのですが、 逆に、このp1CARDから B1G.gifというファイル名を文字列で取得するにはどうしたらいいのでしょうか? まだjavaの勉強して3ヶ月くらいで参考になるサイトも探せず、ドキュメントをみても理解できなくて質問しました。 4人プレイのトランプゲームを作りたくてつまずいてます。

    • ベストアンサー
    • Java
  • Javaが途中で止まってしまいます

    Javaで音声ファイルを変換するスクリプトなのですが、音声ファイル自体は認識して「ファイルコピー終了」と出るのですが、実際にはコピーされておらず、そこで終わってしまい変換工程まで辿り着かない状態です。 ============================== import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class OnseiFileConvert { /** * @param args */ public static void main(String[] args) { OnseiFileConvert exe = new OnseiFileConvert(); exe.execute(); } /** m = 0x80; for( i=0; i<fsize; i++, m++ ) { if( m == 0xFF ) { m = 0x80; } fread( &t, 1, 1, fp ); t = t^m; fwrite( &t, 1, 1, fp_out ); } */ public void execute(){ String voice_dir_in = "C:\\java\\onsei"; String voice_dir_out = "C:\\output\\onsei"; try { convVoice(voice_dir_in,voice_dir_out); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 音声変換処理 * @throws IOException * @throws InterruptedException */ private void convVoice(String voice_dir_in,String voice_dir_out) throws IOException, InterruptedException{ System.out.println("ディレクトリーコピー開始"); System.out.println("xcopy /T /E \"" + voice_dir_in + "\" \"" + voice_dir_out +"\""); Process proc = Runtime.getRuntime().exec( "xcopy /T \"" + voice_dir_in + "\" \"" + voice_dir_out +"\""); proc.waitFor(); proc.destroy(); System.out.println("ディレクトリーコピー終了"); System.out.println("ファイルコピー開始"); convData(voice_dir_in, voice_dir_out); System.out.println("ファイルコピー終了"); } /** * @param voice_dir_in * @param voice_dir_out * @throws IOException * @throws InterruptedException */ private void convData(String voice_dir_in, String voice_dir_out) throws IOException, InterruptedException { System.out.println(voice_dir_in + "/" + voice_dir_out); File in_file = new File(voice_dir_in); File[] in_files_list = in_file.listFiles(); for(int i = 0; i < in_files_list.length ; i++ ){ File chFile = in_files_list[i]; if(chFile.isDirectory()){ convData(voice_dir_in + "\\" + chFile.getName() ,voice_dir_out + "\\" + chFile.getName() ); } else { String file_name = chFile.getName(); System.out.println(file_name); if(".".equals(file_name.substring(0, 1))){ file_name = file_name.substring(1, file_name.length()-4); File ofile = new File(voice_dir_out + "\\" + file_name); if( ofile.length() == 0 ){ convFile(voice_dir_in + "\\" + chFile.getName(),voice_dir_out + "\\" + file_name); } } } } } /** * ファイル単位に変換を実施する処理 */ private void convFile(String input_file_name,String out_file_name) { //convert FileInputStream fip = null; FileOutputStream fop = null; try { System.out.println("変換開始"); fip = new FileInputStream(input_file_name); fop = new FileOutputStream(out_file_name); long fsize = (new File(input_file_name)).length(); int m = 0x80; for( int i=0; i< fsize; i++, m++ ) { if( m == 0xFF ) { m = 0x80; } int t = fip.read(); t = t^m; fop.write(t); } System.out.println("変換完了" + fsize + "Byte"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if(fip != null){ fip.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(fop != null){ fop.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } ============================== 長時間悩んで書き直したりしたのですが、やはり結果が変わらずお手上げ状態です。 どうぞご助力お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう