Android 缩小图像尺寸并充分显示
我需要缩小我的图像(+-2500px一面),以便在我的应用程序中的设备上显示它们。但我有一个问题。如果我用我的代码缩小图像的比例(再向下一点),图像会显示出来,但侧面会被切断。图像的高度与我的代码完美匹配。 我正在使用以下代码缩小图像的尺寸: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
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是不推荐的(即使两者完全相同)。