2013-01-04 19 views
5

写真を撮ってURIを使って保存し、画像処理用の写真を取得する簡単な例を探しています。 私はたくさんのそれらのどれも円滑に進まなかった。写真を撮る方法、Androidで写真を保存する方法

例コードはありますか?

+2

まだ何をしていますか? –

+0

この質問に関する相違するトピックは約100種類あります。検索するだけです! – safari

答えて

-1

次のコードを使用してください。

package com.example.stackoverflow; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.math.BigInteger; 
import java.security.SecureRandom; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class MyCameraActivity extends Activity { 
    private static final int CAMERA_REQUEST = 1888; 



    static String str_Camera_Photo_ImagePath = ""; 
    private static File f; 
    private static int Take_Photo = 2; 
    private static String str_randomnumber = ""; 
    static String str_Camera_Photo_ImageName = ""; 
    public static String str_SaveFolderName; 
    private static File wallpaperDirectory; 
    Bitmap bitmap; 
    int storeposition = 0; 
    public static GridView gridview; 
    public static ImageView imageView; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.ccccc); 
     this.imageView = (ImageView)this.findViewById(R.id.imageView1); 
     Button photoButton = (Button) this.findViewById(R.id.button1); 
     photoButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       str_SaveFolderName = Environment 
         .getExternalStorageDirectory() 
         .getAbsolutePath() 
         + "/rajeshsample"; 
       str_randomnumber = String.valueOf(nextSessionId()); 
       wallpaperDirectory = new File(str_SaveFolderName); 
       if (!wallpaperDirectory.exists()) 
        wallpaperDirectory.mkdirs(); 
       str_Camera_Photo_ImageName = str_randomnumber 
         + ".jpg"; 
       str_Camera_Photo_ImagePath = str_SaveFolderName 
         + "/" + str_randomnumber + ".jpg"; 
       System.err.println(" str_Camera_Photo_ImagePath " 
         + str_Camera_Photo_ImagePath); 
       f = new File(str_Camera_Photo_ImagePath); 
       startActivityForResult(new Intent(
         MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
         MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)), 
         Take_Photo); 
       System.err.println("f " + f); 
      } 
     }); 
    } 


    // used to create randon numbers 
    public String nextSessionId() { 
     SecureRandom random = new SecureRandom(); 
     return new BigInteger(130, random).toString(32); 
    } 


    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == Take_Photo) { 
      String filePath = null; 

      filePath = str_Camera_Photo_ImagePath; 
      if (filePath != null) { 
       Bitmap faceView = (new_decode(new File(
           filePath))); // ========================> good 
               // lines 



       imageView.setImageBitmap(faceView); 

      } else { 
       bitmap = null; 
      } 
     } 
    } 

    public static Bitmap new_decode(File f) { 

     // decode image size 

     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     o.inDither = false; // Disable Dithering mode 

     o.inPurgeable = true; // Tell to gc that whether it needs free memory, 
           // the Bitmap can be cleared 

     o.inInputShareable = true; // Which kind of reference will be used to 
            // recover the Bitmap data after being 
            // clear, when it will be used in the future 
     try { 
      BitmapFactory.decodeStream(new FileInputStream(f), null, o); 
     } catch (FileNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     // Find the correct scale value. It should be the power of 2. 
     final int REQUIRED_SIZE = 300; 
     int width_tmp = o.outWidth, height_tmp = o.outHeight; 
     int scale = 1; 
     while (true) { 
      if (width_tmp/1.5 < REQUIRED_SIZE && height_tmp/1.5 < REQUIRED_SIZE) 
       break; 
      width_tmp /= 1.5; 
      height_tmp /= 1.5; 
      scale *= 1.5; 
     } 

     // decode with inSampleSize 
     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     // o2.inSampleSize=scale; 
     o.inDither = false; // Disable Dithering mode 

     o.inPurgeable = true; // Tell to gc that whether it needs free memory, 
           // the Bitmap can be cleared 

     o.inInputShareable = true; // Which kind of reference will be used to 
            // recover the Bitmap data after being 
            // clear, when it will be used in the future 
     // return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
     try { 

//   return BitmapFactory.decodeStream(new FileInputStream(f), null, 
//     null); 
      Bitmap bitmap= BitmapFactory.decodeStream(new FileInputStream(f), null, null); 
      System.out.println(" IW " + width_tmp); 
      System.out.println("IHH " + height_tmp);   
       int iW = width_tmp; 
       int iH = height_tmp; 

       return Bitmap.createScaledBitmap(bitmap, iW, iH, true); 

     } catch (OutOfMemoryError e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
      // clearCache(); 

      // System.out.println("bitmap creating success"); 
      System.gc(); 
      return null; 
      // System.runFinalization(); 
      // Runtime.getRuntime().gc(); 
      // System.gc(); 
      // decodeFile(f); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      return null; 
     } 

    } 

} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="photo" > 
    </Button> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_action_search" > 
    </ImageView> 

</LinearLayout> 
9

はアンドロイドからカメラを呼び出すためのコードを使用して、この

protected static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 0; 

のような変数を定義します。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"fname_" +   
         String.valueOf(System.currentTimeMillis()) + ".jpg")); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri); 
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

このクラスを呼び出すクラスでは、onActivityResult関数をオーバーライドし、次のコードを入力します。画像をキャプチャし、それを格納し、それを開くために、いくつかの例がある

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

    if (resultCode == RESULT_OK) { 
     if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { 

      //use imageUri here to access the image 

      Bundle extras = data.getExtras(); 

      Log.e("URI",imageUri.toString()); 

      Bitmap bmp = (Bitmap) extras.get("data"); 

      // here you will get the image as bitmap 


     } 
      else if (resultCode == RESULT_CANCELED) { 
      Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT); 
      } 
     } 


    } 
+17

あなたが指定したコードでは、指定されたURIにイメージをフルサイズで保存しますが、エクストラから縮小イメージを取得し、その縮小イメージからビットマップを作成していますか? – paulkayuk

+0

私はフルサイズでuriからイメージを取得しています。あなたは縮小画像をしたいです –

+0

@paulkayuk私はどのように私は圧縮されたものの代わりにフルサイズのイメージイメージを取得するのですか? – onexf

3

私は同じ問題を抱えていた。

インターネットからいくつかのコードをテストしていましたが、何も見つかりませんでした。次に、developer.androidからいくつかの基本コードを学びました。その後、私は2つの異なるコードを混ぜて、私は働いた!ここに行く!

public class MainActivity extends AppCompatActivity { 

    static final int PICTURE_RESULT = 1; 
    String mCurrentPhotoPath; 
    ContentValues values; 
    private Uri file; 
    ImageView imageView; 
    Bitmap help1; 

    ThumbnailUtils thumbnail; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     imageView = (ImageView) findViewById(R.id.imageView); 
     values = new ContentValues(); 
    } 

    public void launch_camera(View v) { 
     // the intent is my camera 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     //getting uri of the file 
     file = Uri.fromFile(getFile()); 

     //Setting the file Uri to my photo 
     intent.putExtra(MediaStore.EXTRA_OUTPUT,file); 

     if(intent.resolveActivity(getPackageManager())!=null) 
     { 
      startActivityForResult(intent, PICTURE_RESULT); 
     } 
    } 

    //this method will create and return the path to the image file 
    private File getFile() { 
     File folder = Environment.getExternalStoragePublicDirectory("/From_camera/imagens");// the file path 

     //if it doesn't exist the folder will be created 
     if(!folder.exists()) 
     {folder.mkdir();} 

     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_"+ timeStamp + "_"; 
     File image_file = null; 

     try { 
      image_file = File.createTempFile(imageFileName,".jpg",folder); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     mCurrentPhotoPath = image_file.getAbsolutePath(); 
     return image_file; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == PICTURE_RESULT) { 
      if(resultCode == Activity.RESULT_OK) { 
       try { 
        help1 = MediaStore.Images.Media.getBitmap(getContentResolver(),file); 
        imageView.setImageBitmap(thumbnail.extractThumbnail(help1,help1.getWidth(),help1.getHeight())); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

XMLファイルには、ちょうどボタンとImageViewの を持っており、権限マニフェストあなたのアンドロイドに宣言することを忘れないでください:より多くの情報のため

<uses-feature android:name="android.hardware.camera" android:required="true" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

をお勧め: https://developer.android.com/training/camera/photobasics.html#TaskPhotoView https://www.youtube.com/watch?v=je9bdkdNQqg

関連する問題