首页
学习
活动
专区
工具
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.7K10

最新版基于ZXing的Android扫码库

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

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

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

    1.6K10

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

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

    52600

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

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

    66220

    全民K歌折叠屏适配探索

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

    2.5K30

    一个经典实用的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 加水印后的图片的文件名在原文件名前面加上这个前缀

    50130

    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 设置的最小的宽或高尺寸,并居中对齐; zoom_end:原始图片按比例缩放到 Image 设置的最小的宽或高尺寸,并以结束方向对齐; clip_center:以原始图片中心缩放图片...,直到原始图的最小宽高之一满足 Image 设置的最小宽高之后,整体进行缩放,再进行裁剪; inside:以原始图片中心对图片进行缩放,直到原始图的最大宽高满足 Image 设置的最小宽高时,整体进行缩放...clip_direction 为裁剪方向,Image 提供了两种裁剪方式,默认的 vertical 垂直方向和 horizontal 水平方向;当设置 horizontal 水平方向裁时,只会原始图片水平居中的位置进行裁剪

    68610

    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

    63620

    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

    7.4K00

    使用 PreviewView 来展示相机预览

    显示相机预览内容是每个相机类应用都会包含的功能,想要完美实现这个却并非易事。原因是,在某些特别极端情况下 camera2 API 的使用会变得很复杂,而且在不同设备上的行为还会有所不同。...还好,Jetpack CameraX 库的 PreviewView 可以帮助您解决这一问题。通过在各种 Android 设备上提供开发者友好、一致且稳定的 API,使得展示相机的预览变得不再困难。...另外在需要对相机预览界面进行旋转、改变透明度或加入动画的情况下,您也应该强制 PreviewView 使用 TextureView 作为实现模式。...其中最常用的是 FIT_CENTER 和 FILL_CENTER,前者将预览界面在保证宽高比的前提下进行缩放然后居中,后者不会进行缩放,保证居中但是可能会导致画面被裁剪。...下方的示例展示了如何在 PreviewView 上实现捏拉缩放 (pinch-to-zoom) 操作: // 创建一个名为 listener 的回调函数,当手势事件发生时会调用这个回调函数 val listener

    2.8K20

    图片上传前预处理,等比缩放、裁剪 (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.6K60

    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 //常量,标识缩略图固定尺寸缩放类型

    98070

    图片上传前预处理,等比缩放、裁剪 (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

    从box-sizing:border-box属性入手,来了解盒模型

    (2)margin可以接受负数,可以用来引起元素框的重叠: (3)背景裁剪(Background clip)属性: background-clip:border-box;背景被裁剪到边框盒...; ②display:flex–允许你处理一些困扰CSS已久的一些传统布局问题,如布置一系列弹性等宽容器或者垂直居中内容(目前,flex布局在移动端使用较为广泛);...(6)框的高度 框的高度不遵守百分比的长度;框的高度总是采用框内容的高度,除非指定一个绝对的高度(如:px或者em),它会比在页面上默认是100%高度更实用。...而max-width:100%限制了图像的宽度使它的最大宽度与父容器的宽度相等。因此,当父容器宽度缩小到小于图像的宽度时,图像会一起缩小。...类名,就能达到在视口宽度不断变化的情况下,图像都可以达到响应式的缩放形式,这也是图像响应式的秘诀所在。

    2.5K10

    PDF Plus for Mac(PDF处理工具)

    PDF文档为生成的PDF文件取有意义的名称将生成的PDF文件保存在您选择的文件夹中以批处理方式裁剪PDF文档添加/删除PDF文档使用点或百分比定义裁剪矩形定义相对于PDF页面某个角的裁剪矩形预览每个PDF...文档的裁剪矩形选择将被裁剪的页面和/或页面间隔给裁剪后的PDF文件取有意义的名称将裁剪的PDF文件保存在您选择的文件夹中批处理模式下的水印PDF文档添加/删除PDF文档在您的PDF文档中添加文本水印,您可以为其自定义以下内容...)笔触(通过添加笔触效果使文本更清晰可见)位置(您可以在以下位置中选择:左下,右下,左上,右上和居中)X偏移(用于文本的精确水平定位)Y偏移(用于文本的精确垂直位置)将图像水印添加到PDF文档中,您可以为其自定义以下内容...:图片(您可以在Mac上选择任何JPG,PNG,TIFF,GIF或BMP图片)缩放(根据需要更改所选图像的缩放比例)不透明度(使图像更不透明或透明)旋转(以一定角度旋转图像)质量(增加或降低图像质量)位置...(您可以在以下位置中选择:左下,右下,左上,右上和居中)X偏移(用于图像的精确水平定位)Y偏移(用于图像的精确垂直位置)-选择要加水印的页面和/或页面间隔-为加水印的PDF文件赋予有意义的名称-将水印的

    2.1K30
    领券