Android应用程序:在ImageView中显示位图图像

时间:2015-03-05 03:16:46

标签: java android bitmap camera imageview

我正在创建一个实现Camera的应用程序,我想知道为什么在我拍照时图像会被保存到一个小位图?

当我按下捕获按钮时,由于某种原因图像缩小(我需要将图像保存到内部存储器,而不是外部/ SD卡),我最终需要将其缩小以显示在ImageView,显然使照片比相机预览更有颗粒感。有一个更好的方法吗?

我希望它与SnapChat相似,你所拍摄的照片会显示你拍摄时的样子......

这是主要活动:

public class MainActivity extends FragmentActivity {


private static final String TAG = "CameraActivity";

public static final int MEDIA_TYPE_IMAGE = 1;
private Camera mCamera;
private CameraPreview mPreview;
private Context mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mContext = this;

    if(checkCameraHardware(mContext)){
        // Create an instance of Camera
        mCamera = getCameraInstance();

        // Create our Preview view and set it as the content of our activity.
        mPreview = new CameraPreview(this, mCamera);
        FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
        preview.addView(mPreview);

        // Add a listener to the Capture button
        Button captureButton = (Button) findViewById(R.id.button_capture);
        captureButton.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // get an image from the camera
                        mCamera.takePicture(null, null, mPicture);
                    }
                }
        );
    }
}

private Camera.PictureCallback mPicture = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(final byte[] data, Camera camera) {

        new AsyncTask<Void, Void, String>() {

            @Override
            protected String doInBackground(Void... params) {


                try {
                    FileOutputStream fos = openFileOutput("img.jpg", Context.MODE_PRIVATE);
                    fos.write(data);
                    fos.close();
                     return "img.jpg";
                } catch (FileNotFoundException e) {
                    Log.d(TAG, "File not found: " + e.getMessage());
                    return null;
                } catch (IOException e) {
                    Log.d(TAG, "Error accessing file: " + e.getMessage());
                    return null;
                }
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                if(result != null){
                    Intent intent = new Intent(mContext, ImageDisplayActivity.class);
                    intent.putExtra(ImageDisplayActivity.KEY_PATH, "img.jpg");
                    startActivity(intent);
                }
            }

        }.execute();


    }
};
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}
public static Camera getCameraInstance(){
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    }
    catch (Exception e){
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}
/** Create a File for saving an image or video */


}

这是图像显示活动:

public class ImageDisplayActivity extends FragmentActivity {

public static final String KEY_PATH = "img.jpg";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_display);



    Intent intent = getIntent();
    String path = getIntent().getStringExtra(ImageDisplayActivity.KEY_PATH);

    try {
        java.io.FileInputStream in = this.openFileInput(path);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        ZoomInZoomOut touch = (ZoomInZoomOut)findViewById(R.id.IMAGEID);
        touch = arrangeImageView(touch);
        touch.setImageBitmap(bitmap);
        in.close();
        Canvas c = new Canvas(bitmap);

    } catch (Exception e) {
        e.printStackTrace();
    }


}



private ZoomInZoomOut arrangeImageView(ZoomInZoomOut img){

    try {

        img.setRotation(90);
        img.setScaleX(2f);
        img.setScaleY(2f);


    } catch (Exception e) {
        e.printStackTrace();
    }
    return img;
}


}

0 个答案:

没有答案