为什么我的图像缩放不正确?

| 我正在尝试将图像缩放到一定大小,具体取决于发送到更新功能的水平大小,但是以下代码似乎无法正确调整图像大小。 编辑:代码:
public class GlassesView extends View {

    private Paint paint;
    private BitmapFactory.Options options;
    private Bitmap bitmapOrg;
    private Bitmap target;
    private Bitmap bitmapRev;
    private Bitmap resizedBitmap;

    private int currY;

    public int glassesX;
    public int glassesY;
    public float glassesSizeX;
    public float glassesSizeY;
    private boolean drawGlasses;
    private boolean glassesMirrored;

    public GlassesView(Context context) {
        super(context);
        paint = new Paint();
        paint.setDither(false);
        paint.setAntiAlias(false);

        options = new BitmapFactory.Options();
        options.inDither = false;
        options.inScaled = false;

        bitmapOrg = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),
                R.drawable.micro_glasses, options), 32, 5, false);
        bitmapRev = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),
                R.drawable.glasses_reverse, options), 32, 5, false);
        drawGlasses = false;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawBitmap(target, 0, 0, paint);

        boolean moving = currY < glassesY;
        if (moving) {
            currY++;
        }
        if (drawGlasses) {
            int newWidth = resizedBitmap.getWidth();
            int newHeight = resizedBitmap.getHeight();
            Paint bluey = new Paint();
            bluey.setColor(Color.argb(64, 0, 0, 255));
            canvas.drawRect(new Rect(glassesX, currY, glassesX + newWidth,
                    currY + newHeight), bluey);

            canvas.drawBitmap(resizedBitmap, glassesX, currY, paint);
        }
        if (moving) {
            invalidate();
        }
    }

    public void drawGlasses(int x1, int x2, int y, boolean mirror) {
        drawGlasses = true;
        glassesMirrored = mirror;
        if (!mirror) {
            glassesSizeX = (float) (x2 - x1) / (float) (25 - 16);
            glassesSizeY = glassesSizeX;
            glassesY = y - (int)(1*glassesSizeX);
            glassesX = (int) (x1 - (glassesSizeX * 16));
        } else {
            glassesSizeX = (float) (x1 - x2) / (float) (25 - 16);
            glassesSizeY = glassesSizeX;
            glassesY = y - (int)(1*glassesSizeX);
            glassesX = (int) (x1 - (glassesSizeX * 16));
        }

        currY = -1;

        if (!glassesMirrored) {
            resizedBitmap = Bitmap.createScaledBitmap(bitmapOrg,
                    (int) (bitmapOrg.getWidth() * glassesSizeX),
                    (int) (bitmapOrg.getHeight() * glassesSizeY), false);
        } else {
            resizedBitmap = Bitmap.createScaledBitmap(bitmapRev,
                    (int) (bitmapRev.getWidth() * glassesSizeX),
                    (int) (bitmapRev.getHeight() * glassesSizeY), false);
        }
    }

    public void setTargetPic(Bitmap targetPic) {
        target = targetPic;
    }

}
结果。 (蓝色矩形是图像预期大小的边界框) 我在哪方面做错了? 编辑2: 这是眼镜: 编辑3: 出于好奇,我在实际的手机上运行它,结果却大不相同,图像被拉伸通过了预定的蓝色框。 编辑4: 我尝试在一些模拟器上运行该应用程序,以查看它是否是Android版本不兼容的东西,但它们似乎都可以正常运行。缩放问题仅出现在我的手机(充满活力,已扎根,CM7)和我堂兄的手机(Droid,也已扎根)上。这些是我测试过的唯一物理设备,但是它们似乎都存在相同的问题。 如果有人可以在这里为我提供帮助,我将非常感谢,这是我项目中的一个巨大障碍,没有其他论坛或消息组在响应。 编辑5: 我应该提到的是,在更新4中,代码进行了一些更改,如我所述,该代码解决了仿真器中的问题,但不适用于物理设备。更改将在上面的代码中更新。 *迫切需要帮助*:P 编辑6: 又一次更新,我在旧的G1上测试了相同的代码,并且可以按预期完美运行。我现在完全不知道了。     
已邀请:
        您是否一直在使用/ res / drawable-nodpi /目录存储图像? 显然,如果您使用/ drawable-ldpi /,/ drawable-mdpi /或/ drawable-hdpi /文件夹,则Android会在加载图像时将缩放比例应用于图像,具体取决于设备。 G1可以工作的原因是,根据您使用的文件夹,它可能不需要任何缩放。 另外,您的IMGUR链接已损坏……您的代码似乎也不正确……您不带任何参数调用DrawGlasses。     
        
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, glassesWidth,   
                                           glassesHeight, matrix, false);
将最后一个参数从false更改为true。 你可以试试看。 以下是我使用的按比例放大方法:
 private void small()    {  
     int bmpWidth=bmp.getWidth();   
     int bmpHeight=bmp.getHeight();  

     Log.i(TAG, \"bmpWidth = \" + bmpWidth + \", bmpHeight = \" + bmpHeight);  

     /* 设置图片缩小的比例 */  
     double scale=0.8;  
     /* 计算出这次要缩小的比例 */   
     scaleWidth=(float) (scaleWidth*scale);   
     scaleHeight=(float) (scaleHeight*scale);   
     /* 产生reSize后的Bitmap对象 */  
     Matrix matrix = new Matrix();  
     matrix.postScale(scaleWidth, scaleHeight);  
     Bitmap resizeBmp = Bitmap.createBitmap(bmp,0,0,bmpWidth,   
             bmpHeight,matrix,true);  
    
        发现出了什么问题。图像必须位于名为“ drawable-nodpi \”的文件夹中,否则将根据DPI进行缩放。     

要回复问题请先登录注册