繁体   English   中英

如何在android中没有质量中断的情况下减小图像大小

[英]how to reduce image Size without Quality break in android

                Bitmap bmp = getResizedBitmap(
                        BitmapFactory.decodeByteArray(data, 0, data.length),
                        500);


public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
        int width = image.getWidth();
        int height = image.getHeight();

        float bitmapRatio = (float) width / (float) height;
        if (bitmapRatio > 0) {
            width = maxSize;
            height = (int) (width / bitmapRatio);
        } else {
            height = maxSize;
            width = (int) (height * bitmapRatio);
        }
        return Bitmap.createScaledBitmap(image, width, height, true);
    }

这是我的代码 使用 getResizedBitmap 我能够减小图像大小但无法在 android 中保持其原始质量请告诉我如何保持质量良好以便图像大小减小和质量应该不错请建议我!

嗨,请尝试下面的代码希望它满足你想要的

public static Bitmap scaleImage(String p_path, int p_reqHeight, int p_reqWidth) throws Throwable
    {
        Bitmap m_bitMap = null;
        System.gc();
        File m_file = new File(p_path);
        if (m_file.exists())
        {
            BitmapFactory.Options m_bitMapFactoryOptions = new BitmapFactory.Options();
            m_bitMapFactoryOptions.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(m_file.getPath(), m_bitMapFactoryOptions);
            m_bitMapFactoryOptions.inSampleSize = calculateInSampleSize(m_bitMapFactoryOptions, p_reqHeight, p_reqWidth);
            m_bitMapFactoryOptions.inJustDecodeBounds = false;
            m_bitMap = BitmapFactory.decodeFile(m_file.getPath(), m_bitMapFactoryOptions);
        }
        else
        {
            throw new Throwable(p_path + " not found or not a valid image");
        }
        return m_bitMap;
    }


    // Helper method
    private static int calculateInSampleSize(BitmapFactory.Options p_options, int p_reqWidth, int p_reqHeight)
    {
        // Raw height and width of image
        final int m_height = p_options.outHeight;
        final int m_width = p_options.outWidth;
        int m_inSampleSize = 1;
        if (m_height > p_reqHeight || m_width > p_reqWidth)
        {
            final int m_halfHeight = m_height / 2;
            final int m_halfWidth = m_width / 2;
            // Calculate the largest inSampleSize value that is a power of 2 and keeps both
            // height and width larger than the requested height and width.
            while ((m_halfHeight / m_inSampleSize) > p_reqHeight && (m_halfWidth / m_inSampleSize) > p_reqWidth)
            {
                m_inSampleSize *= 2;
            }
        }
        return m_inSampleSize;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM