2013-05-29 17 views
51

既存のファイルパスからビットマップまたは描画ファイルを作成しようとしています。ファイルパスからビットマップ/描画ファイルを作成

String path = intent.getStringExtra("FilePath"); 
BitmapFactory.Options option = new BitmapFactory.Options(); 
option.inPreferredConfig = Bitmap.Config.ARGB_8888; 

mImg.setImageBitmap(BitmapFactory.decodeFile(path)); 
// mImg.setImageBitmap(BitmapFactory.decodeFile(path, option)); 
// mImg.setImageDrawable(Drawable.createFromPath(path)); 
mImg.setVisibility(View.VISIBLE); 
mText.setText(path); 

しかしsetImageBitmap()setImageDrawable()はパスからの画像は表示されません。 mTextと表示されたパスは、次のようになります。/storage/sdcard0/DCIM/100LGDSC/CAM00001.jpg

私は間違っていますか?誰でも私を助けることができますか?

+0

BitmapFactory.decodeFile(パス) - >これはあなたのためのBitmapオブジェクトを返すのですか?あなたはそれを確認できますか? – toantran

+1

@ autobot_101はデバッグモードでは、 'mBuffer'に' id'を持っています。しかし、 'mHeight'、' mWidth'値は '-1'、' mLayoutBounds'は 'null'です。 –

+0

次に、イメージがビットマップオブジェクトに「膨張」されていないことを意味するため、ファイルパスを再度確認する必要があります。多分あなたは別の画像を試すことができます – toantran

答えて

82

は、ファイルパスからビットマップを作成します。

File sd = Environment.getExternalStorageDirectory(); 
File image = new File(sd+filePath, imageName); 
BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); 
bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); 
imageView.setImageBitmap(bitmap); 

あなたは親の高さと幅にビットマップを拡大したい場合は、Bitmap.createScaledBitmap関数を使用します。

あなたは間違ったファイルパスを与えていると思います。 :) お役に立てれば。ここ

+1

私はすでに解決策を得ていますが、これは正解として扱います。大規模な画像を読み込む。非常にきれいでいいソリューション!ありがとう! –

+1

ここでimageNameは任意の文字列であると仮定しますか?それとも特定のimageNameですか? – Jeet

+0

@JeetendraChoudharyはいimageNameには、画像の名前として最後の文字列を使用できます。 – CodeShadow

48

それは私の作品:

File imgFile = new File("/sdcard/Images/test_image.jpg"); 
if(imgFile.exists()){ 
    Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
    //Drawable d = new BitmapDrawable(getResources(), myBitmap); 
    ImageView myImage = (ImageView) findViewById(R.id.imageviewTest); 
    myImage.setImageBitmap(myBitmap); 

} 

編集:

String sdcardPath = Environment.getExternalStorageDirectory().toString(); 
File imgFile = new File(sdcardPath); 

ハードコーディングされたSDカードのディレクトリの上に、あなたのケースで動作しない場合は、SDカードのパスを取得することができます

+3

'Environment.getExternalStorageDirectory()。toString()'からSdCardパスを取得してから試してみてください – Antarix

0

パスを介してドロウアブルにアクセスすることはできませんので、プログラマチックにビルドすることができるドロウアブルで人間が読めるインターフェイスが必要な場合。

はどこかにあなたのクラスでHashMapを宣言します。アクセスのために今

private static HashMap<String, Integer> images = null; 

//Then initialize it in your constructor: 

public myClass() { 
    if (images == null) { 
    images = new HashMap<String, Integer>(); 
    images.put("Human1Arm", R.drawable.human_one_arm); 
    // for all your images - don't worry, this is really fast and will only happen once 
    } 
} 

を - まあ

String drawable = "wrench"; 
// fill in this value however you want, but in the end you want Human1Arm etc 
// access is fast and easy: 
Bitmap wrench = BitmapFactory.decodeResource(getResources(), images.get(drawable)); 
canvas.drawColor(Color .BLACK); 
Log.d("OLOLOLO",Integer.toString(wrench.getHeight())); 
canvas.drawBitmap(wrench, left, top, null); 
3

、静的Drawable.createFromPath(String pathName)を使用すると、それを自分でデコードするよりも私にはもう少し簡単なようです... :-)

mImgがシンプルなImageViewの場合は、それも必要ありません。mImg.setImageUri(Uri uri)を直接使用してください。

1
static ArrayList< Drawable> d; 
d = new ArrayList<Drawable>(); 
for(int i=0;i<MainActivity.FilePathStrings1.size();i++) { 
    myDrawable = Drawable.createFromPath(MainActivity.FilePathStrings1.get(i)); 
    d.add(myDrawable); 
} 
+3

答えに記述したコードを説明する必要があることに注意してください。 –

18

がソリューションです:

Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
関連する問題