我有一个Android应用程序,我使用Android相机拍照然后我查看照片,如果我喜欢它然后我将图片上传到网站。
将图片上传到网站我注意到手机上看不到有几个像素!!!在网站上,图片上有一些在手机屏幕上看不到的额外细节! !
电话屏幕上的图片是在图像视图中设置的。
这是活动的布局:
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:scaleType="centerCrop"
android:id="@+id/myPic"
/>
<Button
android:text="Confirm Photo"
android:layout_toLeftOf="@id/back"
android:id="@+id/confirm"
android:layout_marginTop="530dip"
android:layout_height="wrap_content"
android:layout_width="165dip"
android:layout_alignParentRight="true"
>
</Button>
</RelativeLayout>
这是我将图片设置为imageview
:
Bundle extras = getIntent().getExtras();
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize =2;
byte[] imageData = extras.getByteArray("imageData");
Bitmap myImage = BitmapFactory.decodeByteArray(imageData , 0, imageData.length,options);
Matrix mat=new Matrix();
mat.postRotate(90);
bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),myImage.getHeight(), mat, true);
Canvas c = new Canvas(bitmapResult);
drawTextImage(bitmapResult);
StoreByteImage(this, bitmapResult,100);
ImageView imageView = (ImageView) findViewById(R.id.myPic);
imageView.setImageBitmap(bitmapResult);
如需额外的代码或其他详细信息,我会在此提供给您。谢谢
答案 0 :(得分:6)
如果您在谈论网站上的图片大于手机上的图片,那么这是因为您的比例类型设置为:
android:scaleType="centerCrop"
并且您的imageview绑定可能与图像不匹配(因此图像被裁剪)。尝试将此行添加到imageview,看看它是否有所作为。
android:adjustViewBounds="true"
最后将布局高度和宽度属性更改为:
layout_width="fill_parent"
layout_height="wrap_content"
答案 1 :(得分:2)
如果使用scaleType属性时图像大小超出了ImageView的范围:
android:scaleType="centerCrop"
然后,您的图像将被裁剪,仅显示适合您的ImageView的内容。要解决此问题,这里有一个帮助方法,您可以调用该方法将图像缩小到您需要的大小。它可能需要在您的最终调整以适应您的情况,但它应该是有帮助的。这是在Strange out of memory issue while loading an image to a Bitmap object找到的略微修改版本:
public static Bitmap decodeFile(File f, int maxSize){
if (f == null)
return null;
try {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//Find the correct scale value. It should be the power of 2.
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<maxSize || height_tmp/2<maxSize)
break;
width_tmp/=2;
height_tmp/=2;
scale*=2;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
答案 2 :(得分:1)
根据您的问题下面的评论,这是由android:scaleType="centerCrop"
声明引起的。它隐藏了图像的边框,因为设备屏幕上显示的唯一部分是适合它的部分。
NSJonas 在此页面中提供了有关如何使图像适合屏幕的更多详细信息。
答案 3 :(得分:-1)
听起来你想要scaleType "centerInside"
而不是"centerCrop"
。