imageview的问题

时间:2011-08-26 14:19:38

标签: android imageview

我有一个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);

如需额外的代码或其他详细信息,我会在此提供给您。谢谢

4 个答案:

答案 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"