【发布时间】:2011-05-18 20:29:02
【问题描述】:
这是一个简单的问题,但我想知道它是否有一个不昂贵的解决方案。
我有一个图库视图,可以从内存(SD 卡或资源)加载图像。它们的大小为 480x800,因此代码对它们进行采样并在图库视图中显示为缩略图。一切正常,有点...
有些图片是横向的,有些是纵向的。画廊的 imageview 布局将它们全部显示为横向,因此所有纵向图像看起来都被严重拉伸了!
由于这些图像是抽象画,我想旋转肖像画,以便它们都很好且均匀地适合画廊。我可以通过比较它们的宽度和高度来检测它们的方向,然后使用 Matrix 和画布旋转纵向的方向,但这可能太昂贵且在 BaseAdapter 的 getView() 中运行速度太慢。
有人能想出更便宜的方法吗?
public View getView(int position, View convertView, ViewGroup parent){
ImageView i = new ImageView(mContext);
Bitmap bm = null;
if (mUrls[position] != null){
bm = BitmapFactory.decodeFile(mUrls[position].toString(),options);
if (bm != null){
//here could use a bitmap rotation code
//....
i.setImageBitmap(bm);
}
}else{
bm = BitmapFactory.decodeResource(getResources(), R.drawable.deleted);
i.setImageBitmap(bm);
}
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(200, 130));
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
编辑
经过一些测试,我正在使用下面的代码来旋转图像,虽然速度不是很快,但目前可以。
int w = bm.getWidth();
int h = bm.getHeight();
if (w < h){
Matrix matrix = new Matrix();
matrix.postRotate(-90);
bm = Bitmap.createBitmap(bm, 0, 0, w, h, matrix, false);
}
i.setImageBitmap(bm);
【问题讨论】: