首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android:如何在不缩放的情况下居中裁剪图像

在Android中,可以使用Bitmap和Canvas来实现在不缩放的情况下居中裁剪图像。

以下是一种实现方法:

  1. 首先,加载要裁剪的图像文件到Bitmap对象中。可以使用BitmapFactory类的decodeFile方法来实现:
代码语言:java
复制
Bitmap bitmap = BitmapFactory.decodeFile("path_to_image_file");
  1. 然后,创建一个新的Bitmap对象,用于存储裁剪后的图像。新的Bitmap对象的宽度和高度应该是固定的,以确保不会发生缩放。可以使用Bitmap类的createBitmap方法来创建:
代码语言:java
复制
int targetWidth = 200; // 目标宽度
int targetHeight = 200; // 目标高度
Bitmap croppedBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888);
  1. 接下来,创建一个Canvas对象,并将新的Bitmap对象设置为其绘制目标:
代码语言:java
复制
Canvas canvas = new Canvas(croppedBitmap);
  1. 然后,计算图像的裁剪位置。如果原始图像的宽高比与目标宽高比不同,需要根据宽高比的差异来确定裁剪位置。可以使用以下代码来计算裁剪位置:
代码语言:java
复制
float scale;
float dx = 0, dy = 0;
if (bitmap.getWidth() * targetHeight > targetWidth * bitmap.getHeight()) {
    scale = (float) targetHeight / (float) bitmap.getHeight();
    dx = (targetWidth - bitmap.getWidth() * scale) * 0.5f;
} else {
    scale = (float) targetWidth / (float) bitmap.getWidth();
    dy = (targetHeight - bitmap.getHeight() * scale) * 0.5f;
}
  1. 最后,使用Canvas的drawBitmap方法将原始图像绘制到新的Bitmap对象上,并应用裁剪位置和缩放比例:
代码语言:java
复制
Matrix matrix = new Matrix();
matrix.setScale(scale, scale);
matrix.postTranslate((int) (dx + 0.5f), (int) (dy + 0.5f));
canvas.drawBitmap(bitmap, matrix, new Paint());

现在,croppedBitmap对象中存储了居中裁剪后的图像。

这是一个简单的Android中居中裁剪图像的方法。在实际应用中,可能需要根据具体需求进行适当的调整和优化。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何用腾讯云打造一款微视频 APP

如何使用万象优图来实现图片处理(裁剪+缩放+水印)? 万象优图提供了如下图片处理功能: 其中,基本图像处理(imageView2)即为对 图片长和宽按约束条件来等比压缩。...[image.png] 然后,我们在下载链接Url上添加基本图像处理(imageView2)相应参数,含义为“调用基本图像处理imageView2接口,指明采用模式2来等比缩放图片,并指定图片最大值为...[image.png] 但对于我们APP,仅仅实现图片“等比缩放功能”还不够,因为在大多数情况下,用户上传图片长宽不一,等比缩放很容易造成“顾得了长但顾不了宽”,使得原有的图片经过缩放后,要么在显示时产生留白...所以,在实际使用时,我们会采用上图中模式5,来指定在缩放时,先等比缩放,然后居中裁剪。...对于万象优图提供高级图像处理(imageMogr2)接口,可以按照九宫格来选择更多旋转、裁剪处理模式。

4.6K10

最新版基于ZXingAndroid扫码库

总之你想要都在这里。 简单如斯,你试试?...关于 CameraConfig 主要是相机相关配置;:摄像头前置后置、相机预览相关、图像分析相关等配置。...AspectRatioCameraConfig:根据纵横比配置相机,使输出分析图像尽可能接近屏幕比例 ResolutionCameraConfig:根据尺寸配置相机目标图像大小,使输出分析图像分辨率尽可能接近屏幕尺寸...扫描预览界面内部持有 CameraScan,并处理了 CameraScan 初始化(:相机权限、相机预览、生命周期等细节) 使用示例 CameraScan配置示例 CameraScan 里面包含部分支持链式调用方法...v2.x基于CameraX通过预览裁剪方式确保预览界面不变形,无需铺满屏幕,就能适配(v1.x通过遍历Camera支持预览尺寸,找到与屏幕最接近比例,减少变形可能性(需铺满屏幕,才能适配)) v2

5.4K30
  • Android平台GB28181设备接入模块摄像头采集方向不对怎么办?

    技术背景我们在做Android平台GB28181设备接入模块时候,有开发者提到这样诉求:他们智能头盔、执法记录仪等设备,采集到图像,是旋转了90、180甚至270°,设备本身无法针对图像做翻转或者旋转操作...,问我们这种情况下需要如何处理?...:是否水平翻转, 0翻转, 1翻转 * * @param scale_width: 缩放宽,必须是偶数, 0或负数不缩放 * * @param scale_height: 缩放高, 必须是偶数,...:/** * 投递层YUV420888图像, 专门为android.media.Imageandroid.graphics.ImageFormat.YUV_420_888格式提供接口 * * @param...实际上,数据源这块,不止Android自带采集设备,其他编码前数据类型(YV12/NV21/NV12/I420/RGB24/RGBA32/RGB565),均可实现更精细处理。

    52000

    Android 图形处理 —— Matirx 方法详解及应用场景

    居中,对 src 等比例缩放,并最大限度填充变换后矩形,将其居中放置在 dst 中 START 顶部,对 src 等比例缩放,并最大限度填充变换后矩形,将其放置在 dst 左上角,左上对齐...,类似微信扫码效果: 这里首先需要介绍下,相机识别二维码大致流程 相机取景框实时取景 -> 图像帧预处理(包括裁剪、灰度化等)-> 扫码 SDK 分析预处理后图像 -> 识别到二维码,返回二维码信息...(包括在图中位置等) -> 将当前图像原始帧设置为背景图 -> 在图上二维码位置出绘制小黄点 由于 SDK 分析裁剪灰度化过后图像,因此返回二维码位置信息也是基于裁剪过后坐标系,如果我们直接把这个坐标绘制在屏幕上...,必然会发现二维码位置不对 因此这里就涉及到坐标映射: 我们需要把裁剪坐标映射回手机屏幕坐标 先看看我们当前有哪些数据: 裁剪图像 二维码位置信息,是一组顶点(上下左右四个位置点 x,y )...取景框尺寸 我们可以分析出,这里发生了变化是两个矩形:取景框和裁剪图像 根据之前学到内容,我们可以使用 setPolyToPoly 或者 setRectToRect 来描述这一变换,这里我们以

    1.5K10

    Flutter Image实现图片加载

    ) 3.1 width、height width、height:用于设置图片宽、高,当指定宽高时,图片会根据当前父容器限制,尽可能显示其原始大小,如果只设置width、height其中一个,那么另一个属性默认会按比例缩放...cover:会按图片长宽比放大后居中填满显示空间,图片不会变形,超出显示空间部分会被剪裁。...contain:这是图片默认适应规则,图片会在保证图片本身长宽比不变情况下缩放以适应当前显示空间,图片不会变形。...fitWidth:图片宽度会缩放到显示空间宽度,高度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。...fitHeight:图片高度会缩放到显示空间高度,宽度会按比例缩放,然后居中显示,图片不会变形,超出显示空间部分会被剪裁。

    1.9K11

    与我一起学css3:background-size,-clip

    知识点讲解 background-size 一般情况下,我们设置背景图与背景为完全匹配,但也有情况是可能不匹配,或者大或者小,那么当尺寸匹配时,你希望如何控制尺寸呢?...可能取值:px|percentage|cover|contain,详细说明如下: 取值 说明 px 设置背景图像宽度和高度,如果只设置一个,第二个被认为auto percentage 设置背景图像宽度和高度...,如果只设置一个,第二个被认为auto contain 缩放背景图像,让其能显示完整 cover 缩放图像,让其能完全覆盖区域,但可能背景显示不全 兼容性:ie9+以及现代浏览器 background-clip...背景裁剪一般用于控制其背景显示策略,显示覆盖区域,常规默认是覆盖全部也就是border-box。...兼容性:ie9+以及现代浏览器 代码实践 场景讲解 在下面的实践中我们主要实现一个全屏背景中注册窗,效果有以下几点是需要完成: – 背景全屏效果 – 背景模糊效果 – 注册窗水平垂直居中 – 注册表格内容与边框之间有透明背景映射

    65220

    一个经典实用PHP图像处理类

    图像处理类可以完成对图片缩放、加水印和裁剪功能,支持多种图片类型处理,缩放时进行优化等。 <?...php /* file: image.class.php 类名为Image 图像处理类,可以完成对各种类型图像进行缩放、加图片水印和剪裁操作。...http://www.lai18.com / class Image { / 图片保存路径 / private $path; /** 实例图像对象时传递图像一个路径,默认值是当前目录 @..."/"; } /** 对指定图像进行缩放 @param string $name 是需要处理图片名称 @param int $width 缩放宽度 @param int $height...,3为顶端居右; 4为中部居左,5为中部居中,6为中部居右; 7为底端居左,8为底端居中,9为底端居右; @param string $qz 加水印后图片文件名在原文件名前面加上这个前缀

    49430

    全民K歌折叠屏适配探索

    : 对于宽比高长视频来说: 在首页(容器高宽固定)情况下,无论展开、折叠其宽度填满,高度居中自适应伸缩。...在详情页(容器宽度固定、高度可变)情况下,折叠时:容器高度计算为最低高度,视频垂直居中显示;展开时:视频宽度填满、高度自适应伸缩、容器自动扩容。...对于宽比高短视频来说: 在首页(容器高宽固定)情况下,展开时视频高度填满,宽度居中对齐;视频高度填满,宽度按比例溢出。...           // 居中裁剪            dx = (mLayoutWidth - mVideoWidth) * 0.5f;       } else {            ...简单来说,其效果还是分屏模式效果类似,但同一屏幕两半展示均为同一应用不同Activity。

    2.5K30

    HarmonyOS学习路之开发篇—— Java UI框架(基础组件说明【一】)

    在AbilitySlice中通过super.findComponentById(ResourceTable.组件id)获取组件,获取成功后就可以对该组件进行操作,添加监听,设置内容等。...Image共有XML属性继承自:Component,Image自有XML属性见下表: 属性名称 属性描述 使用案例 clip_alignment 图像裁剪对齐方式 ohos:clip_alignment...=“left” 左对齐裁剪… =“right” 右对齐裁剪… =“top” 顶部对齐裁剪… =“bottom” 底部对齐裁剪… =“center” 居中对齐裁剪 image_src 图像 可直接配置色值...scale_mode 图像缩放类型 ohos:scale_mode=“center” 表示原图按照比例缩放到与Image最窄边一致,并居中显示… =“zoom_start” 表示原图按照比例缩放到与Image...… =“inside” 表示将原图按比例缩放到与Image相同或更小尺寸,并居中显示。… =“clip_center” 表示将原图按比例缩放到与Image相同或更大尺寸,并居中显示。 未完待续…

    2K20

    【HarmonyOS 专题】06 简单了解 Image 图片组件 (一)

    和尚在之前简单搭建了一个【登录】页面,其中用到了 Image 图片组件,和尚今天简单学习一下常用 Image 组件; Image Image 继承自 Component 基础组件类,与 Android...类似;和尚优先学习以下几个常见重要属性; 1. image_src 图片资源 Image 通过 image_src 来引入本地图片资源,与 Android 类似,很容易理解; <Image...:原始图片按比例缩放到 Image 设置最小宽或高尺寸,并居中对齐; zoom_end:原始图片按比例缩放到 Image 设置最小宽或高尺寸,并以结束方向对齐; clip_center:以原始图片中心缩放图片...,直到原始图最小宽高之一满足 Image 设置最小宽高之后,整体进行缩放,再进行裁剪; inside:以原始图片中心对图片进行缩放,直到原始图最大宽高满足 Image 设置最小宽高时,整体进行缩放...clip_direction 为裁剪方向,Image 提供了两种裁剪方式,默认 vertical 垂直方向和 horizontal 水平方向;当设置 horizontal 水平方向裁时,只会原始图片水平居中位置进行裁剪

    67710

    Android平台RTMP推送模块如何对接NV21、YV12、RGB、YUV等编码前数据

    ​ 前言 我们在对接Android平台摄像头或者屏幕采集、编码打包推送场景时候,随着采集设备不同,出来数据也是多样化,比如NV21、YV12、RGB、YUV等,更有图像数据甚至是翻转或者倒置,...Android设备前后摄像头数据: Android自带camera摄像头数据对接是最基础,需要考虑是摄像头方向问题,比如横屏、竖屏、还有部分定制设备home键在左侧情况,相对来说处理比较简单,直接上接口...; clipedHeight: 裁剪高; 确保传下去裁剪宽、高均为偶数 * * @return {0} if successful */ public native...is_horizontal_flip:是否水平翻转, 0翻转, 1翻转 * * @param scale_width: 缩放宽,必须是8倍数, 0不缩放 * *...@param scale_height: 缩放高, 必须是8倍数, 0不缩放 * * @param scale_filter_mode: 缩放质量, 范围必须是[1,3], 传0

    62620

    Android实现长图展开与收起效果

    当原图size大于ImageViewsize,超过部分裁剪处理; 2.centerInside:以原图完全显示为目的,将图片内容完整居中显示,通过按比例缩小原图size宽(高)等于或小于ImageView...中心,等比例放大原图,直到填满ImageView为止(指的是ImageView宽和高都要填满),原图超过ImageView部分作裁剪处理; 4.matrix:不改变原图大小,从ImageView...左上角开始绘制原图,原图超过ImageView部分作裁剪处理; 5.fitCenter:把原图按比例扩大或缩小到ImageView高度,居中显示; 6.fitEnd:把原图按比例扩大(缩小)到...对于Glide版本4.0以上,如果宽度过大,会等比例缩放至宽度等于ImageView宽度,因此并不会有问题,但是我们项目用Glide版本是3.7,而且不容易升级,故此方法不可行。...因此,可以在加载之前将宽度过大图片等比例缩放缩放完成后再加载到ImageView中去。

    1.9K20

    CSS中background属性与margin和padding内外边距关系总结

    background-repeat: space; 【当前没有广泛支持】图像会尽可能重复, 但是不会裁剪....第一个和最后一个图像会被固定在元素(element)相应边上, 同时空白会均匀地分布在图像之间,background-position属性会被忽视, 除非只有一个图像能被无裁剪地显示,只在一种情况下裁剪会发生...background-repeat: no-repeat; 图像不重复,如果图像较大会被裁剪,如果图像比背景元素小,背景图像位置由 background-position 属性来决定。...CSS3新增: background-origin:指定背景显示区域。默认情况下,总是以元素左上角为坐标原点进行背景图像定位。...background-size: initial; 背景图原始尺寸 background-size: cover; 缩放背景图片以完全覆盖背景区,超出部分裁剪 background-size: contain

    7K00

    图片上传前预处理,等比缩放裁剪 (html5 + canvas)

    processing for upload (html5 + canvas) 源码地址:https://github.com/capricorncd/image-process-tools 解决图片上传前缩放到一定比例自动居中裁剪...后期版本应该会加入手动设置裁剪位置及缩放比例。 处理完成后,将返回处理完成数据,及原图片文件大小、宽度、高度和Base64数据。...imgTools.conversion(result.rawdata.size)); } /** * result.data //待上传图像数据...(可选) 为true时,必须同时设置width、height值大于0 裁剪规则: 图片缩放到一定比列(即一边等于设置值,另一边超出设置值部分裁去),居中裁剪 width: 640 裁剪缩放宽度为...3.若crop为false,同时设置了width/height值,则只按width缩放,忽略height height: 640 裁剪缩放高度为640px(可选) type: jpg 上传图片目标格式

    3.5K60

    PhalApi-Image -- 图像处理

    #PhalApi-Image -- 图像处理 ##前言 因为在工作中遇到了需要按照尺寸压缩上传图片,进过了一番寻找发现ThinkPhP图形处理能够满足大部分需求, 所以特地制作成拓展方式提供出来希望,...压缩裁剪 图片处理最关键一项功能就是压缩和裁剪,比如用户上传了一套图片2Mb*10张=20MB让我们直接把原图交给用户时候这个流量几乎承担不起所以就需要使用到图片压缩以及裁剪技术(具体看业务需求).../** * 可以支持其他类型缩略图生成,设置包括下列常量或者对应数字: * IMAGE_THUMB_SCALING //常量,标识缩略图等比例缩放类型 * IMAGE_THUMB_FILLED...//常量,标识缩略图缩放后填充类型 * IMAGE_THUMB_CENTER //常量,标识缩略图居中裁剪类型 * IMAGE_THUMB_NORTHWEST //常量...,标识缩略图左上角裁剪类型 * IMAGE_THUMB_SOUTHEAST //常量,标识缩略图右下角裁剪类型 * IMAGE_THUMB_FIXED //常量,标识缩略图固定尺寸缩放类型

    96770

    图片上传前预处理,等比缩放裁剪 (html5 + canvas)

    源码地址:https://github.com/capricorncd/image-process-tools 解决图片上传前缩放到一定比例自动居中裁剪、等比缩放等。...后期版本应该会加入手动设置裁剪位置及缩放比例。 处理完成后,将返回处理完成数据,及原图片文件大小、宽度、高度和Base64数据。...imgTools.conversion(result.rawdata.size)); } /** * result.data //待上传图像数据...时,必须同时设置width、height值大于0 裁剪规则: 图片缩放到一定比列(即一边等于设置值,另一边超出设置值部分裁去),居中裁剪 width: 640 裁剪缩放宽度为640px(可选) 不配置...3.若crop为false,同时设置了width/height值,则只按width缩放,忽略height height: 640 裁剪缩放高度为640px(可选) type: jpg 上传图片目标格式

    2.1K20
    领券