2013-03-27 13 views
28

Bu benim kodumdur ve bu bitmapi dahili depolamamda kaydetmek istiyorum. Public boolean saveImageToInternalStorage, google'dan bir koddur, ancak nasıl kullanılacağını bilmiyorum. button2'ye dokunduğumda button1 eylemini izleyin.Dahili depolama biriminde bitmap nasıl kaydedilir

public class MainActivity extends Activity implements OnClickListener { 
Button btn, btn1; 
SurfaceView sv; 
Bitmap bitmap; 
Canvas canvas; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn=(Button)findViewById(R.id.button1); 
    btn1=(Button)findViewById(R.id.button2); 
    sv=(SurfaceView)findViewById(R.id.surfaceView1); 

    btn.setOnClickListener(this); 
    btn1.setOnClickListener(this); 

    bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 

} 
@Override 
public void onClick(View v) { 
    canvas=sv.getHolder().lockCanvas(); 
    if(canvas==null) return; 
    canvas.drawBitmap(bitmap, 100, 100, null); 
    sv.getHolder().unlockCanvasAndPost(canvas); 


} 

public boolean saveImageToInternalStorage(Bitmap image) { 

    try { 
    // Use the compress method on the Bitmap object to write image to 
    // the OutputStream 
    FileOutputStream fos = openFileOutput("desiredFilename.png", Context.MODE_PRIVATE); 

    // Writing the bitmap to the output stream 
    image.compress(Bitmap.CompressFormat.PNG, 100, fos); 
    fos.close(); 

    return true; 
    } catch (Exception e) { 
    Log.e("saveToInternalStorage()", e.getMessage()); 
    return false; 
    } 
    } 
} 

cevap

90

Mağaza Görüntüsü kullanmak sdcard aşağıdaki kodu sizin bitmap kaydet

private void storeImage(Bitmap image) { 
    File pictureFile = getOutputMediaFile(); 
    if (pictureFile == null) { 
     Log.d(TAG, 
       "Error creating media file, check storage permissions: ");// e.getMessage()); 
     return; 
    } 
    try { 
     FileOutputStream fos = new FileOutputStream(pictureFile); 
     image.compress(Bitmap.CompressFormat.PNG, 90, fos); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     Log.d(TAG, "File not found: " + e.getMessage()); 
    } catch (IOException e) { 
     Log.d(TAG, "Error accessing file: " + e.getMessage()); 
    } 
} 

Yolu Almak İçin ben bu button1 ve button2 işlevlerinde onclick görünümü düzenledikten Açıklamalarınız Görüntü Depolama

/** Create a File for saving an image or video */ 
private File getOutputMediaFile(){ 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory() 
      + "/Android/data/" 
      + getApplicationContext().getPackageName() 
      + "/Files"); 

    // This location works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      return null; 
     } 
    } 
    // Create a media file name 
    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date()); 
    File mediaFile; 
     String mImageName="MI_"+ timeStamp +".jpg"; 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName); 
    return mediaFile; 
} 

DÜZENLEME için ayrı ayrı çalıştırılır.

public onClick(View v){ 

switch(v.getId()){ 
case R.id.button1: 
//Your button 1 function 
break; 
case R.id. button2: 
//Your button 2 function 
break; 
} 
} 
+0

capturedImage ve mImageName nasıl oluşturulmalıdır? –

+0

Düzenlendi şimdi kontrol edin marius – GoCrazy

+0

çok teşekkür ederim, ama button2 hala button1 fucntion –

0

Değiştir onClick() şöyle:

@Override 
public void onClick(View v) { 
    if(v == btn) { 
     canvas=sv.getHolder().lockCanvas(); 
     if(canvas!=null) { 
      canvas.drawBitmap(bitmap, 100, 100, null); 
      sv.getHolder().unlockCanvasAndPost(canvas); 
     } 
    } else if(v == btn1) { 
     saveBitmapToInternalStorage(bitmap); 
    } 
} 

btn1 yüzden bitmap boyalı olduğunu bunu kaydetmek denemeden önce önce btn basılması gerekir zorunlu kılmak amacıyla çeşitli yolları vardır.

Ben başlangıçta btn1 devre dışı olduğunu göstermektedir ve btn tıklandığında böyle, bunu etkinleştirmek:

if(v == btn) { 
    ... 
    btn1.setEnabled(true); 
} 
+0

nasıl olursa gelen görünümü (görünüm == btn) ve else if olması gerekir (görünüm == btn1)? –

+0

Düzenlediğim "görüntüle" -> "v". Bu iki 'if()' ifadesi, 'onClick()' işlevinizin içinde hangi düğmeye basıldığını belirler. –

3
private static void SaveImage(Bitmap finalBitmap) { 

    String root = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    File myDir = new File(root + "/saved_images"); 
    myDir.mkdirs(); 

    String fname = "Image-"+ o +".jpg"; 
    File file = new File (myDir, fname); 
    if (file.exists()) file.delete(); 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
     out.flush(); 
     out.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
İlgili konular