gpt4 book ai didi

android - 如何在图库 View 中旋转图像

转载 作者:行者123 更新时间:2023-11-29 14:07:16 24 4
gpt4 key购买 nike

这是一个简单的问题,但我想知道它是否有一个不昂贵的解决方案。

我有一个图库 View ,它从内存(SD 卡或资源)加载图像。它们的大小为 480x800,因此代码对它们进行采样并在图库 View 中显示为缩略图。一切正常,有点……

有些图片是风景,有些是肖像。图库的 ImageView 布局将它们全部显示为风景,因此所有肖像图像看起来都被严重拉伸(stretch)了!

由于这些图像是抽象画,我想旋转肖像画,使它们都很好地均匀地适合画廊。我可以通过比较它们的宽度和高度来检测它们的方向,然后使用 Matrix 和 Canvas 旋转纵向的方向,但这可能太昂贵且太慢而无法在 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);

最佳答案

进入矩阵!!!

Resize and Rotate Image - Example

对我很有用,希望对你有帮助

  if (bm != null){
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
matrix.postRotate(45);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true);
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
i.setImageBitmap(bmd);
}

回收有效,我建议使用 asynctask 加载图像,这样可以避免 UI 阻塞。

这是一个例子::

http://android-apps-blog.blogspot.com/2011/04/how-to-use-asynctask-to-load-images-on.html

另一个例子::

http://open-pim.com/tmp/LazyList.zip

关于android - 如何在图库 View 中旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com