1

私の参照アクティビティでは、次のコードを使用してユーザーの選択からビットマップを作成します。

Uri selectedImage = imageReturnedIntent.getData(); // uri from user selection.
File tempFile; // temporary File
Uri tempUri; // temporary Uri

try 
{
    // initializing File
    tempFile = File.createTempFile("crop", "png", Environment.getExternalStorageDirectory());
}
catch (IOException e1)
{
    tempFile = null;
}

if(tempFile != null)
{
    // initializing Uri
    tempUri = Uri.fromFile(tempFile);   
}
else
{
    tempUri = selectedImage;
}

// creating new crop intent
final Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(selectedImage); // original image Uri
intent.putExtra("outputX", width);
intent.putExtra("outputY", height);
intent.putExtra("aspectX", width);
intent.putExtra("aspectY", height);
intent.putExtra("scale", true);
intent.putExtra("noFaceDetection", true);
intent.putExtra("output", tempUri);  // cropped image Uri
intent.putExtra("outputFormat", "PNG");
startActivityForResult(intent, 23);

InputStream imageStream;
Bitmap yourSelectedImage;
try
{
    // initializing InputStream
    imageStream = getContentResolver().openInputStream(tempUri);
}
catch (FileNotFoundException e) 
{
    imageStream = null;
}

if(imageStream != null)
{
    // getting Bitmap from Uri
    yourSelectedImage = BitmapFactory.decodeStream(imageStream);
}
else
{
    yourSelectedImage = null;
}

次に、他のアクティビティで、このトリミングされた画像を取得して描画しようとします。ただし、常に null として表示され、デフォルトのビットマップが描画されます。

取得部分は次のとおりです。

File tempF = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "crop.png"); // also tried using only "crop" as filename.

Uri uri = Uri.fromFile(tempF);

InputStream imageStream;
Bitmap yourSelectedImage;
try
{
imageStream = getContentResolver().openInputStream(uri);
}
catch (FileNotFoundException e) 
{
    imageStream = null;
}

if(imageStream != null)
{
    yourSelectedImage = BitmapFactory.decodeStream(imageStream);
}
else
{
    yourSelectedImage = null;
}

if(yourSelectedImage == null)
{
    drawable = BitmapFactory.decodeResource(getResources(),R.drawable.bg);  // bg is default bitmap if image is not found.
}
else
{
    drawable = yourSelectedImage;
}

// *all drawing happens here*

tempF.delete();
4

1 に答える 1

1

10分前、私はこれを見つけるまで同じ問題を抱えていました:

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
             startActivityForResult(intent, TFRequestCodes);

そして、結果メソッドにこれを追加します:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

if (requestCode == TFRequestCodes && resultCode == RESULT_OK) {  

        selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};

        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        filePath = cursor.getString(columnIndex);
        cursor.close();

       thumbnail=decodeSampledBitmapFromResource(getResources(), filePath,
                120, 85);


        i1.setImageBitmap(thumbnail);
    } 
}  

お役に立てれば。

于 2012-09-01T16:03:19.743 に答える