public static Bitmap corp(Bitmap bitmap) {
int corpWith = Configs.CORP_THUMBS_WIDTH;
int corpHeight = Configs.CORP_THUMBS_HEIGHT;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int srcLeft = 0;
int srcTop = 0;
int dstLeft = 0;
int dstTop = 0;
Bitmap output = Bitmap.createBitmap(corpWith,corpHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
if(corpWith >= width){
dstLeft = (corpWith -width)/2;
corpWith = width;
}else{
srcLeft = (width - corpWith)/2;
}
if(corpHeight >= height){
dstTop = (corpHeight - height)/2;
corpHeight = height;
}else{
srcTop = (height - corpHeight)/2;
}
Log.i(Constants.LOG_TAG_DEBUG, "corpWith:" + corpWith + ",corpHeight:" + corpHeight + ",dstLeft:" + dstLeft + ",dstTop:"+dstTop);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect dstRect = new Rect(dstLeft, dstTop, corpWith + dstLeft, corpHeight + dstTop);
final Rect srcRect = new Rect(srcLeft, srcTop, corpWith + srcLeft, corpHeight + srcTop);
final RectF rectF = new RectF(dstRect);
final float roundPx = Configs.CORP_THUMBS_ROUND; //圆角像素
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, srcRect, dstRect, paint);
return output;
}
关于Rect 的详细解释如下
Rect dstRect = new Rect(dstLeft, dstTop, corpWith + dstLeft, corpHeight + dstTop);
这个构造方法需要四个参数这四个参数 指明了什么位置 ?我们就来解释怎么画 这个 矩形
这四个 参数 分别代表的意思是:left top right bottom 上下左右呗。啊,不是 是 左 上 右 下。 下面给大家解释
left : 矩形左边的X坐标 150 ---->图片中的A点
top: 矩形顶部的Y坐标 75 ---->图片中的B点
right : 矩形右边的X坐标 260 ----->图片中的C点
bottom: 矩形底部的Y坐标 120 ------->图片中的D点
说白了就是左上角的坐标是(150,75),右下角的坐标是(260,120),这样就好理解了
具体参考 http://byandby.iteye.com/blog/825330
分享到:
相关推荐
在Android平台上,开发一款应用涉及相机拍照、裁剪和生成缩略图是常见的需求。本文将深入探讨如何在Android中实现这些功能,并提供一个实际的源码实例。 首先,我们来了解一下Android相机API的基本概念。Android...
本文将深入探讨如何在Android中实现图片裁剪功能,包括裁剪为缩略图和大图两种形式。 首先,我们需要了解Android中的Bitmap类,它是Android图形库中的核心类,用于表示和操作位图。在裁剪图片时,我们通常会用到...
2. 缩略图的生成可以通过Bitmap.createScaledBitmap方法实现,根据需要的大小比例来裁剪或缩放原图。 3. 考虑到性能优化,通常会先加载较小的缩略图,然后在用户需要时再加载原图,这种策略被称为懒加载。 4. 在...
缩略图通常是通过降低图像分辨率、裁剪部分区域或者对原始图像进行下采样来生成的。 图片放大展开,顾名思义,就是将缩略图恢复成其原始大小的过程。这个过程可能涉及到图像插值,因为缩略图的像素数量通常远小于...
- 压缩包中的“Android例子源码录制视频并生成缩略图的简单例子”可能包含以下关键代码片段: - 初始化`MediaRecorder`和`MediaMetadataRetriever` - 视频录制逻辑 - 使用`getFrameAtTime()`生成缩略图 - 可能...
本篇文章将深入探讨如何在Android系统中获取本地视频的缩略图,并且展示如何利用列表视图(ListView)或者网格视图(GridView)来显示这些缩略图。 首先,我们需要了解Android提供了一个名为`...
拍照传大图片,如果用普通方式会耗用极大的内存,Android一个App原则上的16M内存限制可以一下子被耗光。Android在拍照上有一个隐藏的设计,如果拍照图片过大,只返回一张缩略图。具体到不同手机,都是不一样的。
在Android开发中,创建图片的缩略图是常见的需求,而将图片处理成带有特殊效果的缩略图,如卷角和圆角,可以提升应用的视觉体验。本文将详细介绍如何在Android中实现这两种效果。 首先,我们来看如何生成带圆角的...
- 如果需要自定义相册UI,可以创建一个全新的Activity或Fragment,利用GridView或RecyclerView展示图片缩略图。每个item需要绑定一个ImageView,通常使用 Glide 或 Picasso 这样的库来加载和显示图片,以优化性能。...
对于大图,可以考虑使用低分辨率的缩略图,或者在需要时才加载和显示全分辨率的图片。 - 使用`RecyclingBitmapDrawable`或类似机制来回收不再使用的Bitmap,防止内存泄漏。 6. **使用示例项目** - 提供的"Android...
它们提供了丰富的功能,如缩放、旋转以及缩略图显示,使得开发者可以方便地在应用中集成图片裁剪功能。 `CropImageView`库允许用户选择一个图片,然后在自定义的视图中进行自由裁剪。它支持多种裁剪模式(例如方形...
- 加载速度:考虑到内存限制,可以通过缩略图加载和懒加载策略优化图片加载速度。 综上所述,实现“Android选择相册拍照裁剪图片完美效果”涉及到多个步骤和技术,包括选择图片、拍照、裁剪、防止变形、权限管理...
3. 最后,你可以将生成的缩略图设置到ImageView或其他视图组件中,或者进行进一步的处理,如裁剪、调整大小等。 在压缩包中的示例项目可能还包含了如何播放视频的实现。在Android中,可以使用`VideoView`或`...
生成缩略图的方法包括简单地按比例缩小图片,或者使用插值算法保持清晰度。在编程中,我们可以使用各种库(如Python的PIL、Java的ImageIO、JavaScript的sharp等)来实现这一功能。 3. **前端展示**:在网页设计中,...
- `Bitmap`操作:用于缩略图生成和内存管理,防止内存溢出。 - `SharedPreferences`:保存用户的图片选择状态。 - `Intent`:用于启动系统图库或返回选中的图片数据。 5. **图片处理**:根据需求,可能需要对...
例如,避免一次性加载过大尺寸的图片,可以使用缩略图或者在裁剪时动态调整图片大小。同时,合理使用异步处理,避免UI线程阻塞。 在实际开发中,可以创建一个自定义的裁剪工具类,封装裁剪相关的逻辑,包括权限检查...
服务器接收到图片后,可能需要保存图片文件,生成缩略图,或者进行其他处理。这通常涉及文件系统操作和图像处理库。 9. **安全考虑**: 在整个过程中,要确保用户隐私安全,比如删除不需要的临时图片文件,避免...
在创建`Intent`时,你可以通过设置`EXTRA_OUTPUT`额外参数来指定保存照片的URI,这样可以获得原始图片而不是经过压缩的缩略图。 ```java Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ...
此外,对于大图片的处理,应考虑使用低分辨率的缩略图来提高操作的流畅性,只有在用户确认裁剪区域后才加载高分辨率的图片进行裁剪。 总的来说,实现Android自定义View的照片裁剪功能涉及到多个步骤,包括自定义...
对于大图,可以使用Fresco库实现动态加载,先加载低质量的缩略图,再逐步加载高质量图片,提升用户体验。 6. 图片旋转: Bitmap的rotate方法可以实现图片的旋转,但需要注意旋转会导致Bitmap大小变化,可能引发...