android 定义uri,Android在ImageView上从URI设置图像

更新了更多代码

我试图抓取刚拍摄的照片并以编程方式将其设置为ImageView.

按下图片按钮,

picture_button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

takePhoto(mTextureView);

}

});

它运行takePhoto方法:

public void takePhoto(View view) {

try {

mImageFile = createImageFile();

final ImageView latest_picture = (ImageView) findViewById(R.id.latest_picture);

final RelativeLayout latest_picture_container = (RelativeLayout) findViewById(R.id.latest_picture_container);

final String mImageFileLocationNew = mImageFileLocation.replaceFirst("^/","");

Toast.makeText(getApplicationContext(),"" + mImageFile,Toast.LENGTH_SHORT).show();

Uri uri = Uri.fromFile(mImageFile);

Toast.makeText(getApplicationContext(),""+uri,Toast.LENGTH_LONG).show();

latest_picture.setImageURI(uri);

latest_picture_container.setVisibility(View.VISIBLE);

} catch (IOException e){

e.printStackTrace();

}

lockFocus();

captureStillImage();

}

运行createImageFile()和captureStillImage()

private void captureStillImage() {

try {

CaptureRequest.Builder captureStillBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);

captureStillBuilder.addTarget(mImageReader.getSurface());

int rotation = getWindowManager().getDefaultDisplay().getRotation();

captureStillBuilder.set(CaptureRequest.JPEG_ORIENTATION,ORIENTATIONS.get(rotation));

CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {

@Override

public void onCaptureCompleted(CameraCaptureSession session,CaptureRequest request,TotalCaptureResult result) {

super.onCaptureCompleted(session,request,result);

//Toast.makeText(getApplicationContext(),"Image Taken",Toast.LENGTH_SHORT).show();

unLockFocus();

}

};

mCameraCaptureSession.capture(captureStillBuilder.build(),captureCallback,null);

} catch (CameraAccessException e) {

e.printStackTrace();

}

}

File createImageFile() throws IOException {

String timestamp = new SimpleDateFormat("yyyyMMdd").format(new Date());

String subFolder = "";

if(pref_session_unique_gallery.equals("yes")){

if(event_name != null){

subFolder = event_name;

} else {

subFolder = timestamp;

}

} else {

subFolder = "_GEN";

}

if(event_name == null){

event_name = "";

} else {

event_name = event_name + "_";

}

String imageFileName = "CPB_"+event_name+timestamp+"_";

File storageDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "CPB" + File.separator + subFolder);

storageDirectory.mkdir();

File image = File.createTempFile(imageFileName,".jpg",storageDirectory);

mImageFileLocation = image.getAbsolutePath();

return image;

}

和图像保存在这里:

private static class ImageSaver implements Runnable {

private final Image mImage;

private ImageSaver(Image image) {

mImage = image;

}

@Override

public void run() {

ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer();

byte[] bytes = new byte[byteBuffer.remaining()];

byteBuffer.get(bytes);

FileOutputStream fileOutputStream = null;

try {

fileOutputStream = new FileOutputStream(mImageFile);

fileOutputStream.write(bytes);

} catch (IOException e) {

e.printStackTrace();

} finally {

mImage.close();

if(fileOutputStream != null){

try {

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

我在createImageFile()之后获取了正确的图像路径并将其烘烤以显示每次都是什么.但即使是latest_picture_container上的setVisibility也没有工作……如果我注释掉InputStream,Bitmap和setImageBitmap,那么latest_picture_container就会正常显示.不知道为什么这是错的.

出于某种原因,URI在文件后面会有三个斜杠,

file:///storage/0/...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值