Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 缩小图像尺寸并充分显示_Android_Image_Imageview - Fatal编程技术网

Android 缩小图像尺寸并充分显示

Android 缩小图像尺寸并充分显示,android,image,imageview,Android,Image,Imageview,我需要缩小我的图像(+-2500px一面),以便在我的应用程序中的设备上显示它们。但我有一个问题。如果我用我的代码缩小图像的比例(再向下一点),图像会显示出来,但侧面会被切断。图像的高度与我的代码完美匹配。 我正在使用以下代码缩小图像的尺寸: static public Bitmap scaleToFill(Bitmap b, int width, int height) { float factorH = height / (float) b.getWidth(); float

我需要缩小我的图像(+-2500px一面),以便在我的应用程序中的设备上显示它们。但我有一个问题。如果我用我的代码缩小图像的比例(再向下一点),图像会显示出来,但侧面会被切断。图像的高度与我的代码完美匹配。 我正在使用以下代码缩小图像的尺寸:

static public Bitmap scaleToFill(Bitmap b, int width, int height) {
    float factorH = height / (float) b.getWidth();
    float factorW = width / (float) b.getWidth();
    float factorToUse = (factorH > factorW) ? factorW : factorH;
    return Bitmap.createScaledBitmap(b, (int) (b.getWidth() * factorToUse), (int) (b.getHeight() * factorToUse), false);
}
我得到的高度和宽度如下:

        WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;

在带有ScaleType CENTER\u裁剪的ImageView中查看图像。我希望有人能帮我!提前谢谢

在布局文件中-内部图像视图

<ImageView
 android:scaleType="fitXY"
/>

try with thsi code.

尝试使用thsi代码。

这个问题比你想象的要普遍得多。这与缩小规模或android无关

如果希望保持纵横比,则必须选择空白或仅显示图像的一部分

同样的问题也发生在电视上,电视屏幕的纵横比与发送给它的屏幕的纵横比不同

还有一种调整图像大小的实验方法(),但它并不总是很好地工作,并且取决于图像本身

顺便说一句,缩小比例的方式效率很低,因为它使用了大量内存(首先解码原始位图,然后创建一个新位图,它是原始位图的缩小版本)。
你要么试试,要么试试

您是否尝试过在ImageView上设置
CENTER\u INSIDE
而不是
CENTER\u CROP
?Jave,这可以工作,但是如果图像需要放大,它就不能工作了。为什么不工作?imageview不会更改源文件的大小。
CENTER\u INSIDE
所做的唯一一件事就是确保显示的图像符合视图,同时保持其比例。如果我不将其缩小,这就是outofmemory例外。所以我确实需要缩小它的比例。是的,但是如果图像纵横比与屏幕比例不同,则在使用
CENTER\u裁剪
时,侧面将被切掉,如果您改为在内部使用
CENTER\u
(在缩放图像上),则图像将被放置,以便整体可见。有关所有可能的比例类型的列表,请参见“是”,但我需要保持图像的比例。所以我不能用这个。我看了你的方法,看起来不错。但我需要在sampleSize中填写什么?我需要计算吗?如果是这样,怎么做?仅仅是因为即使在10英寸的设备上,图像也需要保持清晰(而不是模糊)。应计算样本大小。没错。这个数字应该告诉算法需要缩小位图的大小。例如,如果将其设置为2,并且图像为1000x1000,则输出将为500x500。您可以在此处找到计算样本大小的算法:。关于你写的第二篇文章,我不明白。。。请注意,我的方法可能比谷歌的方法慢一点,但你可以让它工作,即使分数而不是整数(不支持,但可能)。好的,我理解这一点。但我不知道屏幕有多大。ImageView在整个屏幕上展开。因为宽度是fill\u parent,所以我无法得到计算样本大小的宽度,你有什么想法吗?是的,但这与你提出的问题相去甚远,所以你可以使用谷歌搜索引擎搜索。在本例中,您可以搜索“android获取屏幕分辨率”,并发现您可以使用getResources().getDisplayMetrics():)。顺便说一句,使用match_parent作为fill_parent是不推荐的(即使两者完全相同)。