2012-07-03 2 views
7

내 액티비티에서 비트 맵을 반환하고 싶기 때문에 다른 애플리케이션에서도 사용할 수 있습니다.액티비티로 돌아 가기

텍스트를 반환하는 것은 분명합니다.

Intent data = new Intent(); 
data.putExtra("text1", "text."); 
data.putExtra("text2", "longer text."); 
setResult(RESULT_OK, data); 

어떻게 비트 맵을 반환하나요?

자세한 정보 : 이미지에는 모든 이미지를 얻으려는 사람이 사용할 수있는 몇 가지 의도가 있습니다.

<intent-filter> 
    <action android:name="android.intent.action.GET_CONTENT" /> 
    <category android:name="android.intent.category.OPENABLE" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.PICK" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="vnd.android.cursor.dir/image" /> 
</intent-filter> 

편집 :

public void finish(Bitmap bitmap) { 
    try { 
     File folder = new File(Environment.getExternalStorageDirectory() + "/Icon Select/"); 
     if(!folder.exists()) { 
      folder.mkdirs(); 
     } 
     File nomediaFile = new File(folder, ".nomedia"); 
     if(!nomediaFile.exists()) { 
      nomediaFile.createNewFile(); 
     } 

     FileOutputStream out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); 
     File bitmapFile = new File(Environment.getExternalStorageDirectory() + "/Icon Select/latest.png"); 

     if(bitmapFile.exists()) { 
      Intent localIntent = new Intent().setData(Uri.fromFile(bitmapFile)); 
      setResult(RESULT_OK, localIntent);     
     } else { 
      setResult(RESULT_CANCELED); 
     } 
     super.finish(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.d("beewhale", "Error writing data"); 
    } 
} 
+0

달성하려는 목표는 무엇입니까? 그것을 설명하십시오 –

답변

5

Ovidiu Latcu에 동의하는 동안 메모리 문제가 발생할 수 있습니다.

비트 맵을 SD 카드의 임시 위치에 저장하는 것이 좋습니다. 그런 다음 거기에서 액세스하십시오. (비트 맵을 파일에 쓰고 읽음).

다른 방법으로 바이트 배열을 추가하려면 비트 맵을 다른 형식으로 먼저 압축하십시오 (예 : Jpeg 또는 유사,이 다시 메모리 문제의 변경을 줄일 수 있습니다.

간단한 8M 픽셀 이미지는 32MB (4 레이어)입니다. 그리고 이것은 응용 프로그램을위한 대부분의 (전부는 아닐지라도) 휴대 전화에서 허용되는 메모리 사용량을 초과합니다.

저장소에 바로 저장하면 내장 카메라 앱이이 문제를 방지하는 방법입니다. 여기서 카메라 API를 내장 그것을 않습니다 - 당신은 또한 전달 된 열린 우리당에 저장, 당신이라는 의도에 코드를 작성하는 것이해야이 :

public void showCameraScreen(View view) { 
    // BUILT IN CAMERA 
    Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this))); 
    this.startActivityForResult(camera, 1); 

} 

private File getTempFile(Context context) { 
    // it will return /sdcard/MyImage.tmp 
    final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); 
    if (!path.exists()) { 
     path.mkdir(); 
    } 
    return new File(path, "MyImage.tmp"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1 && resultCode == RESULT_OK) { 
     final File file = getTempFile(this); 

     byte[] _data = new byte[(int) file.length()]; 
     try { 
      InputStream in = new FileInputStream(file); 
      in.read(_data); 
      in.close(); 
      in = null; 
      //DO WHAT YOU WANT WITH _data. The byte array of your image. 
     } catch (Exception E) { 

     } 
    } 
} 

참고 : 여기에

는 처리에 대한 내 코드입니다 .

0

당신은 putExtra(key,byte[])를 사용하고 Bitmapbytes을 통과 한 다음 onActivityResult 사용 BitmapFactory.decodeByteArray()Bitmap을 만들 수 있습니다 : 여기 한 기능의 솔루션입니다.

편집 :Uri을 자원/사진으로 보낼 수도 있습니다.