【问题标题】:Capture Image from Camera and Display in Imageview从相机捕获图像并在 Imageview 中显示
【发布时间】:2019-09-20 15:16:26
【问题描述】:

我想显示我在 imageview 中拍摄的图像,但它不显示图像。我检查了这些页面,但没有得到任何结果: Image captured from camera not displaying in imageview android

Capture Image from Camera and Display in Activity

我的活动:

public class MainActivity extends AppCompatActivity {
    Button btncam;
    ImageView imgpic;
     final int take=10;
     long name;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imgpic=(ImageView)findViewById(R.id.imgpic);
        btncam=(Button)findViewById(R.id.btncamera);
        btncam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                name=System.currentTimeMillis();
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(G.appadress+"/"+name+".jpg")));
                startActivityForResult(intent,take);
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
           switch (requestCode){
        case take:
            Bitmap bitmap= BitmapFactory.decodeFile(G.appadress+"/"+name+".jpg");
            imgpic.setImageBitmap(bitmap);

    }
    }
}

G 类:

public class G extends Application {
  public static   Context context;
    public static String appadress= Environment.getExternalStorageDirectory().getAbsolutePath();
    @Override
    public void onCreate() {
        super.onCreate();
        context=getApplicationContext();
        File file=new File(appadress);
        file.mkdirs();
    }
}

清单:

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

【问题讨论】:

标签: android


【解决方案1】:

试试:

public class MainActivity extends AppCompatActivity {

Button btncam;
ImageView imgpic;
final int take = 10;
Bitmap bitmap;
long name;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imgpic = (ImageView) findViewById(R.id.imgpic);
    btncam = (Button) findViewById(R.id.btncamera);
    btncam.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, 0);
        }
    });
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data.getExtras() != null) {

            bitmap = (Bitmap) data.getExtras().get("data");

            try {
                File imageFile = createImageFile();
                OutputStream stream = new FileOutputStream(imageFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                stream.flush();
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            imgpic.setImageBitmap(bitmap);
        }
    }
}

public File createImageFile() throws IOException {
    // Create an imageView file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getStorageDir();
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpeg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    return image;
}

private File getStorageDir() {
    File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES + "/PathPhoto"); //Environment.DIRECTORY_PICTURES -->> it is path for Pictures

    if (storageDir != null) {
        if (!storageDir.mkdirs()) {
            if (!storageDir.exists()) {
                Log.d("CameraSample", "failed to create directory");
                return null;
            }
        }
    }
    return storageDir;
}

}

【讨论】:

  • 这可能会抛出一个NullPointerException,因为他们在相机Intent 上放置了一个EXTRA_OUTPUT,并且预计在通过时不会返回该缩略图位图。
  • 此代码有效,但我倾向于将照片存储在所需位置,而不是手机的默认位置。
  • 此代码有效,但将照片保存在手机的默认位置,而不是 / PathPhoto 文件夹中。我想把照片保存到最喜欢的位置。stackoverflow.com/users/10759029/baby
  • 用您的路径更改“Environment.DIRECTORY_PICTURES + "/PathPhoto"”。 Environment.DIRECTORY_PICTURES -> 是图片的路径。如果文件夹不存在,我的代码会在提供的路径中创建文件夹。
【解决方案2】:

我更喜欢Android Image Cropper 库,自动处理导入或捕获图像。

private void onCaptureClick(){
    CropImage.activity()
        .setGuidelines(CropImageView.Guidelines.ON)
        .start(this);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {
            Uri resultUri = result.getUri();
        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }
}

【讨论】:

    【解决方案3】:

    G 类:

    public class G extends Application {
      public static   Context context;
        public static String appadress= Environment.getExternalStorageDirectory().getAbsolutePath()+"/reza";
        @Override
        public void onCreate() {
            super.onCreate();
            context=getApplicationContext();
            File file=new File(appadress);
            file.mkdirs();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      相关资源
      最近更新 更多