【问题标题】:java Android - working with image scaling/cropping programmaticallyjava Android - 以编程方式处理图像缩放/裁剪
【发布时间】:2013-08-19 11:13:29
【问题描述】:

好吧,这一切折磨了我好几个星期,我设置了一个 227 像素高的图像,将其缩放到 170 像素,即使我希望它是 wrap_content 每当我这样做的时候。

好的。在这里,我拍摄了 1950 像素长的 My Image(我将其中的一部分放在这里,以便您了解它的外观)。

首先,我想将其缩放回 227 像素高,因为它是这样设计的,应该是这样的

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ver_bottom_panel_tiled_long);
            int width = bitmapOrg.getWidth();
        int height = bitmapOrg.getHeight();
        int newWidth = 200; //this should be parent's whdth later
        int newHeight = 227;

        // calculate the scale
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // create a matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                          width, height, matrix, true); 


        BitmapDrawable dmpDrwbl=new BitmapDrawable(resizedBitmap);

    verbottompanelprayer.setBackgroundDrawable(dmpDrwbl);

所以...这根本不是裁剪图像 - 不,它是 1950 像素压入 200 像素。

但我只想剪掉除这 200 像素或我要设置的任何宽度之外的任何东西 - 剪裁它,而不是将所有这些长图像压入 200 像素区域。

还有,BitmapDrawable(Bitmap bitmap);和 imageView.setBackgroundDrawable(drawable);已弃用 - 我该如何更改?

【问题讨论】:

    标签: java android image crop


    【解决方案1】:

    根据我所见,您创建了一个新尺寸 (200x227) 的位图,所以我不确定您的预期。你甚至在你缩放的 cmets 中写了,没有关于裁剪的消息......

    你可以做的是:

    1. 如果 API 至少为 10(姜饼),您可以使用 BitmapRegionDecoder ,使用 decodeRegion

    2. 如果 API 太旧,则需要解码大位图,然后将其裁剪为新位图,使用 Bitmap.createBitmap

    类似这样的:

    final Rect rect =...
    if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD_MR1)
      {
      BitmapRegionDecoder decoder=BitmapRegionDecoder.newInstance(imageFilePath, true);
      croppedBitmap= decoder.decodeRegion(rect, null);
      decoder.recycle();
      }
    else 
      {
      Bitmap bitmapOriginal=BitmapFactory.decodeFile(imageFilePath, null);
      croppedBitmap=Bitmap.createBitmap(bitmapOriginal,rect.left,rect.top,rect.width(),rect.height());
      }
    

    【讨论】:

    • 你能给我举个例子,如何用 Bitmap.CreateBitmap 裁剪它吗?它仍然不裁剪,只是尝试将整个图像放入其中。可能我做错了什么?
    • 你检查过我刚刚给你的链接吗?您需要使用正确的功能。不管怎样,我已经写了一个示例代码,虽然我不确定它是否编译得很好。
    • 好吧,这就是问题所在 - 我想使用 BitmapRegionDecoder 但它只适用于文件。但我想将它与资源 - 不同的 dpi 一起使用。处理文件会使事情复杂化。有没有办法将 BitmapRegionDecoder 与资源一起使用?
    • 请阅读我给你的内容。我不能在一个地方教你关于 android 的所有东西......它不仅仅是用于文件。我只展示了一个例子。您也可以使用 inputStream 或 fileDescriptor。例如,您可以使用 getResources().openRawResource(R.drawable....)
    • 这对我来说太疯狂了............我从资源中获取了一张图片......原来是 227 像素......如果我使用 getHeight - 它返回 170 pix。如果我把它放在 bitmap.xml 中 - 它将是 170 像素。但如果我裁剪它 - 高度将再次变为 227 像素!!!怎么回事???
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2021-05-25
    • 2017-02-19
    • 2016-08-29
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多