2017-08-18 14 views
0

以下のコードでは、ビットマップを使用してイメージビューを作成したことがわかります。私が知りたいのは、その画像ビューの画像をカメラロールに保存する方法です。ありがとう!作成した画像ビューをカメラロールに保存するにはどうすればよいですか?

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.key_code_zoom); 

title = (TextView) findViewById(R.id.accountTitleLarge); 
imageView = (ImageView) findViewById(R.id.keyCodeLarge); 

Intent callingActivity = getIntent(); 
Bundle callingBundle = callingActivity.getExtras(); 
if (callingBundle != null) { 
    String titleText = callingBundle.getString("title"); 
    byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes"); 
    bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
    title.setText(titleText); 
    imageView.setImageBitmap(bmp); 
} 

imageView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     supportFinishAfterTransition(); 
    } 
}); 
} 
+0

写真は、予想以上に困難です。私はこのライブラリをお勧めします。github.com/fabian7593/MagicalCameraは、写真を撮るためのベストです、パーミッションを守り、写真を撮ったりギャラリーから選んだり、それをデバイスのファイルとして保存したり、それを登録したりしますギャラリーでは、別の機能を持っていますが、それはあなたが開始する必要があります – cutiko

答えて

0

ギャラリーに画像を保存するには、まずビットマップを取得して保存する必要があります。

private void imageToRoll(){ 
imageView.buildDrawingCache(); 
Bitmap image = imageView.getDrawingCache(); // Gets the Bitmap 
MediaStore.Images.Media.insertImage(getContentResolver(), imageBitmap, imagTitle , imageDescription); // Saves the image. 
} 

また、マニフェストにアクセス許可を設定します。一般的なタスクの誰もが、それは些細なことだと思います傾向にあるが、それは実際、非常に長くて退屈ではないですので、

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

あなたの応答をありがとう!私はそれが動作すると思うが、私のエミュレートされたデバイスは、私の仮想SDカードが壊れていると言っている。あなたはそれを修正する方法を知っていますか? –

+0

SDカードイメージに問題があるように見えるので、新しいAVDを作成してみてください。ただし、エミュレータではなく実際のデバイスでテストすることをお勧めします。 – Abhi

+0

新しいAVDが作成されましたが、動作しません。私は後でデバイスを試してみます!ありがとう! –

0

はあなたがあなたの携帯電話のストレージにImageViewのからイメージを保存するのに役立ちますいくつかのコードを探しているなら、次のコードは、ファイル・パスを提供する必要がありますあなたの

public String getImageFromView() { 

    imageview.setDrawingCacheEnabled(true); 
    // this is the important code :) 
    // Without it the view will have a dimension of 0,0 and the bitmap will be null 
    imageview.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

    imageview.layout(0, 0, imageview.getMeasuredWidth(), imageview.getMeasuredHeight()); 
    imageview.buildDrawingCache(true); 

    //Define a bitmap with the same size as the view 
    Bitmap b = imageview.getDrawingCache(); 
    String imgPath = getImageFilename(); 
    File file = new File(imgPath); 

    try { 
     OutputStream os = new FileOutputStream(file); 
     b.compress(Bitmap.CompressFormat.JPEG, 90, os); 
     os.flush(); 
     os.close(); 
     ContentValues image = new ContentValues(); 
     image.put(Images.Media.TITLE, "NST"); 
     image.put(Images.Media.DISPLAY_NAME, imgPath.substring(imgPath.lastIndexOf('/')+1)); 
     image.put(Images.Media.DESCRIPTION, "App Image"); 
     image.put(Images.Media.DATE_ADDED, System.currentTimeMillis()); 
     image.put(Images.Media.MIME_TYPE, "image/jpg"); 
     image.put(Images.Media.ORIENTATION, 0); 
     File parent = file.getParentFile(); 
     image.put(Images.ImageColumns.BUCKET_ID, parent.toString() 
       .toLowerCase().hashCode()); 
     image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName() 
       .toLowerCase()); 
     image.put(Images.Media.SIZE, file.length()); 
     image.put(Images.Media.DATA, file.getAbsolutePath()); 
     Uri result = mContext.getContentResolver().insert(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image); 
    } catch (FileNotFoundException fnfe) { 
     fnfe.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return imgPath; 
    } 

を助けますgetImageFilename();この関数は、ファイルが格納されていると思われるパスを提供します。 ContentValuesはギャラリーで画像をスキャンする責任があります。 これが役立つことを願っています。

関連する問題