我是android的新手。我有一个应用程序,它具有从库中上传图像或从相机拍摄图像的功能。下面我写了代码,我得到了图像。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode!=0){
if(PICK_MEDIA_FROM_GALLERY == requestCode){
if(null != data){
Uri uri = data.getData();
//String type = getMimeType(uri);
filePath = getRealPathFromURI(uri);
checkFileSupport(filePath);
}
}else{
if(ACTION_TAKE_PHOTO == requestCode){
checkFileSupport(filePath);
}else if(ACTION_TAKE_VIDEO == requestCode){
handleCameraVideo();
}
}
}
}
此功能用于固定图像的写入方向。
public Bitmap fixOrientation(Bitmap bmp) {
try {
ExifInterface exif = new ExifInterface(filePath);
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
if (orientation==6)
{
Matrix matrix = new Matrix();
matrix.postRotate(90);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}
else if (orientation==8)
{
Matrix matrix = new Matrix();
matrix.postRotate(270);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}
else if (orientation==3)
{
Matrix matrix = new Matrix();
matrix.postRotate(180);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bmp;
}
我使用函数
将Image设置为imageview private void setImagePreview(final String realPath) throws IOException {
Display display = getWindowManager().getDefaultDisplay();
Bitmap bitmap = ImageUtils.getThumbnailBitmap(realPath, display.getWidth());
if(null!=bitmap){
//rotate image and save in the same filepath
bitmap = fixOrientation(bitmap);
FileOutputStream fOut = new FileOutputStream(filePath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
RelativeLayout tempLayout = (RelativeLayout) findViewById(R.id.previewLayout);
tempLayout.setVisibility(View.VISIBLE);
ImageView previewImageView = (ImageView) findViewById(R.id.previewImageView);
previewImageView.setImageBitmap(bitmap);
}
}
我在相机中有一张图片。
第一次从“图库”中选择该图像时,
当我尝试更改附件并选择相同的图片时,视图会显示如下
我该如何解决这个问题?有人可以帮帮我吗?
答案 0 :(得分:0)
您的代码似乎没问题。每当我调整图像大小时,我都使用BitmapFactory.Options
类。看到这堂课。
Bitmap bitmap = ImageUtils.getThumbnailBitmap(realPath, display.getWidth());
返回什么?完整的位图还是缩略图?缩略图非常小。
您似乎正在更改原始图像而不是图像副本。获取文件路径并自己创建图像。并且,为了避免OutOfMemoryException
使用BitmapFactory.Options
属性InSampleSize
。我不确定财产。只是谷歌,你会发现。
我希望这可以帮助您解决问题。
答案 1 :(得分:0)
您的第二张图片质量似乎比第一张更差。您可以检查是否设置了ImageView宽度和高度wrap_content
?如果是,请尝试为测试设置固定值。以及两个位图大小是否相同,宽度和高度?