奇怪的事情发生了 - 至少我没有得到它。
我有一个图像(w:120px,h:63px),它出现在一个ImageButton上。我拥有的该图像的唯一变体是放在drawable-hdpi中(并且没有其他可绘制目录)。 这个图像和每个分辨率(密度)一切都很好,Android非常好地处理它。
但是,麻烦的是我从相册中拍摄照片(例如一些非常大的照片),将其缩放到按钮的尺寸(之前提到过,w:120px h:63px)并将该小图像设置为ImageButton背景
如果我在具有中密度(160)的仿真器上进行测试,则可以,但是当在高密度按钮上进行测试时,由于缩放后的图像显得较小,因此会调整大小。
有没有人知道发生了什么,以及为什么在缩放图像后图像的大小会再次发生变化?
任何线索都将受到高度赞赏。
以下是我用于调整图片大小的代码:
public static void resizeAndSaveImage(String pathToResize, int newWidth, int newHeight, FileOutputStream output) {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(pathToResize), null, options);
if (bitmap != null) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
output.close();
}
} catch (Exception e) {
// ...
}
尺寸参数传递如下:newWidth = 120,newHeight = 63。
答案 0 :(得分:1)
为了达到你想要的效果,你需要使用与密度无关的像素(dp),而不是物理像素。从here阅读:
与密度无关的像素是 相当于一个物理像素 160 dpi屏幕,基线密度 由平台承担(如上所述) 稍后在本文件中)。在运行时, 平台透明地处理任何 基于所需的dp单位的缩放 关于屏幕的实际密度 使用。将dp单位转换为 屏幕像素很简单:pixels = dps *(密度/ 160)。例如,在240 dpi屏幕上,1 dp将等于1.5 物理像素。使用dp单位 定义您的应用程序的UI是非常高的 建议,作为一种确保方式 在不同的UI上正确显示您的UI 屏幕。
为了更详细地解释为什么一个图像(专辑照片)而不是图像资源,您需要发布用于缩放的代码。