/**
* 圆角处理
*
* @param bitmap
* 原图
* @param roundPx
* 角度
* @return
*/
public static Bitmap getCornerBitmap(Bitmap bitmap, float roundPx) {
if (bitmap == null)
return null;
// todo:to prevent memory overflow, suspend the processing of fillet
// 创建一个指定宽度和高度的空位图对象
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
// 用该位图创建画布
Canvas canvas = new Canvas(output);
// 画笔对象
final Paint paint = new Paint();
// 画笔的颜色
final int color = 0xff424242;
// 矩形区域对象
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
// 未知
final RectF rectF = new RectF(rect);
// 拐角的半径
roundPx = roundPx == 0 ? (bitmap.getWidth() + bitmap.getHeight()) / 4
: roundPx;
// 消除锯齿
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, rect, rect, paint);
// 最终在画布上呈现的就是该圆角矩形图片,然后我们返回该Bitmap对象
return output;
}
--------------------------------------------------------------------------
/**
* 圆形处理
*
* @param bitmap
* 原图
* @return
*/
public static Bitmap getRoundBitmap(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
float roundPx;
float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;
if (width <= height) {
roundPx = width / 2;
left = 0;
top = 0;
right = width;
bottom = width;
height = width;
dst_left = 0;
dst_top = 0;
dst_right = width;
dst_bottom = width;
} else {
roundPx = height / 2;
float clip = (width - height) / 2;
left = clip;
right = width - clip;
top = 0;
bottom = height;
width = height;
dst_left = 0;
dst_top = 0;
dst_right = height;
dst_bottom = height;
}
Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);
final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);
final RectF rectF = new RectF(dst);
paint.setAntiAlias(true);// 设置画笔无锯齿
canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas
// 以下有两种方法画圆,drawRounRect和drawCircle
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
// canvas.drawCircle(roundPx, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://www.cnblogs.com/rayray/p/3670120.html
canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle
return output;
}
-------------------------------------------------------------------------------0
/**
* 缩略图
*
* @param bitmap
* 原图
* @param thumbnailWidth
* 压缩宽
* @param thumbnailHeight
* 压缩高
* @return
*/
public static final Bitmap cropBitmap(final Bitmap bitmap,
final int thumbnailWidth, final int thumbnailHeight) {
if (bitmap == null)
return null;
final int width = bitmap.getWidth();
final int height = bitmap.getHeight();
int focusX = width / 2;
int focusY = height / 2;
int cropX;
int cropY;
int cropWidth;
int cropHeight;
float scaleFactor;
if (thumbnailWidth * height < thumbnailHeight * width) {
// Vertically constrained.
cropWidth = thumbnailWidth * height / thumbnailHeight;
cropX = Math.max(0,
Math.min(focusX - cropWidth / 2, width - cropWidth));
cropY = 0;
cropHeight = height;
scaleFactor = (float) thumbnailHeight / height;
} else {
// Horizontally constrained.
cropHeight = thumbnailHeight * width / thumbnailWidth;
cropY = Math.max(0,
Math.min(focusY - cropHeight / 2, height - cropHeight));
cropX = 0;
cropWidth = width;
scaleFactor = (float) thumbnailWidth / width;
}
final Bitmap finalBitmap = Bitmap.createBitmap(thumbnailWidth,
thumbnailHeight, Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(finalBitmap);
final Paint paint = new Paint();
paint.setDither(true);
paint.setFilterBitmap(true);
canvas.drawColor(0);
canvas.drawBitmap(bitmap, new Rect(cropX, cropY, cropX + cropWidth,
cropY + cropHeight), new Rect(0, 0, thumbnailWidth,
thumbnailHeight), paint);
bitmap.recycle();
// Store (long thumbnailId, short focusX, short focusY, JPEG data).
final ByteArrayOutputStream cacheOutput = new ByteArrayOutputStream(
16384);
final DataOutputStream dataOutput = new DataOutputStream(cacheOutput);
// byte[] retVal = null;
try {
dataOutput.writeShort((int) ((focusX - cropX) * scaleFactor));
dataOutput.writeShort((int) ((focusY - cropY) * scaleFactor));
dataOutput.flush();
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 80, cacheOutput);
// retVal = cacheOutput.toByteArray();
cacheOutput.close();
// finalBitmap.recycle();
} catch (Exception e) {
;
}
return finalBitmap;
}
相关推荐
Latex下使用JabRef添加参考文献
文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...
安卓 Android Studio页面布局之 设置圆角矩形样式与使用
最近一段时间正在做的项目中要求设计界面采用卡片式,卡片要有圆角矩形效果。现在记录下具体实现过程。 先上效果图:
关于RTP时间戳以及播放器对时间戳的处理
首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采...
AndroidStudio 如何设置圆角图片
今天在做公司项目于的时候,要求做一个圆角图片,一开始想法是在imgView设置一个背景弧度,后来发现有些不好,索性百度了下,百度上实现的方法有很多。我选择用Glide的方式实现 贴一个Glide官方地址:Glide官方地址 不得不说,这个库还是非常好用的,用来加载各种图片也非常方面,强烈推荐。在引用这个库的时候官方最新版4.8.0为 有可能会有sdk版本问题,推荐使用3.5.2 https...
基于Spring Boot在线远程考试系统的设计与实现
结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。
《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》
注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)
AndroidStudio设置图片圆角
当在Android应用中开发时,经常需要将图片显示为圆角形式,以增强用户界面的美观性和吸引力。本文将介绍如何在Android Studio中实现这一功能,通过几种不同的方法来设置指定图片的圆角效果。2.导入Gradle包: implementation ("com.github.bumptech.glide:glide:4.15.1")通过设置圆形图片和设置圆角,可以把图片设置成圆角。1.将图片加入到布局文件中:使用ImageView控件显示图片。3.在Activity文件写入代码。
Moviepy自动化剪辑视频中的广告
本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。
Android实现圆形圆角图片
本文主要使用两种方法实现图形圆角图片 自定View加上使用Xfermode实现 Shader实现 自定View加上使用Xfermode实现/** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ private Bitmap createC
【SpringBoot 4.x 第70节】夯爆了,企业级 API 设计规范落地:状态码、错误码、接口文档与兼容性(超详解)!
🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。
24、虚拟地理信息系统:技术与应用的全面解析
本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。
androidstudio全局图片设置圆角、圆形
public class MyApp extends Application { File file; @Override public void onCreate() { super.onCreate(); String mPath=getExternalCacheDir().getPath()+"/AK"; file = n...
Python全栈入门到实战【基础篇 04】核心基础:变量与4种基础数据类型(int/float/str/bool)
本文介绍了Python编程中的变量和四种基础数据类型,作为后续所有语法的入门前提。变量是数据的“容器”,解决数据复用问题,而数据类型决定数据能进行的操作。文章详细讲解了变量的定义语法、命名规则(强制语法和推荐风格)、赋值与修改原理,并通过实操示例展示其应用场景。正确使用变量可以提升代码复用性、简化修改并增强可读性,是编程效率的核心原则。掌握这些基础知识能避免90%的新手语法错误,为学习更复杂的Python语法打下坚实基础。
Android生成圆形缩略图的一种方法
做项目的过程中需将用户头像图片生成圆形的指定大小的drawable对象,用作actionbar的navigation icon。 原始图片是方形的,尺寸144x144,若是直接调用setNavigationIcon()方法,图片将覆盖actionbar的大部分。 综合网上各种制作缩略图和圆形图片的方法,总结出如下个人觉得比较简便的方法,记录下来以备后边用到。 比较简单,直接贴代码 /**
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
Android Coil3圆形CircleCropTransformation 、 圆角矩形RoundedCornersTransformation,Kotlin
遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。遗留问题,配置的disk cache似乎没有work,指定的磁盘缓存文件路径生成是生成了,但是app跑起来运行后(图正常显示),里面是空的。2、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
android图片资源加载失败,Android之Glide(非常好用的图片加载框架)
谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。Glide是一种快速、高效的开源媒体管理和Android的包裹mediadecoding图像加载框架,内存和磁盘缓存和资源集中到一个简单的和易于使用的界面。 Glide是一个开源的图片加载和缓存处理的第三方框架。使用Android的Glide和Android的Picasso库的方式几乎一模一样。Glide...
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
Android图片缓存框架 - Glide的RequestOptions (四)
目录 1. Glide API 2. Glide导入包 3. Glide 7种加载图片方式 4. 取消加载 5 Glide加载GIF 6. Glide的RequestOptions 6.1 RequestOptions的API: 6.2 设置占位图 6.3 设置错误图片 6.4 淡入淡出动画 6.5 图片大小减小剪裁 6.6 圆形图片 6.7 缩略图 6.8 缓存...
Android 图片加载框架Coil使用总结
文章目录简介简单使用高斯模糊圆角圆形灰色变换 GrayscaleTransformationGif监听下载过程取消下载替换 okhttp 实例自定义Coil 源码分析 简介 Coil 是一个 Android 图片加载库,通过 Kotlin 协程的方式加载图片。特点如下: 更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等。 更轻量级: Coil 只有2000个方法(前提是你的 APP 里面集成了 OkHttp 和 Co
android图片资源加载失败,Android图片加载问题分析
下图是一个客户端图片加载模块常见的处理流程。imagepipeline.png本文以UniversalImageLoader为例分析了这一流程,然后分析了Fresco的优势和问题,最终推荐大家使用Glide。从UniversalImageLoader分析图片加载中需要处理的问题网络主要用于下载网络图片,在UIL中是将图片地址变为InputStream。UIL支持多种类型来源的图片显示,包括:网络文...
缩略图和三级缓存
error()方法用于在加载失败时显示的图片,.placeholder()方法用于在加载过程中显示的占位图片。另外,.skipMemoryCache(true)方法用于跳过内存缓存,.diskCacheStrategy(DiskCacheStrategy.ALL)方法用于设置磁盘缓存策略。loadImage方法用于加载普通的图片,loadcircleImage方法用于加载圆形图片,loadcornerImage方法用于加载带有圆角的图片。
探索圆角图像新境界:RoundImageView
探索圆角图像新境界:RoundImageView 在移动应用开发领域,细节的雕琢往往是用户体验提升的关键。对于 Android 开发者而言,处理图片展示时,给图片加上圆角效果是一个常见的需求。今天,我们为您推荐一款小巧而功能强大的开源项目 —— RoundImageView。它不仅完美支持矢量图,还提供了高度定制化的选项,让您的应用界面焕然一新。 项目介绍 RoundImageView 是一个简洁...
Android入门到实战(六):Android主流图片加载框架
本文介绍了Android开发中常用的图片加载框架及其适用场景。主流框架包括功能全面的Glide、轻量级的Picasso、适合大图的Fresco和Kotlin原生的Coil,开发者可根据项目需求选择。文章重点讲解了最常用的Glide框架,提供了一份实用速查表,涵盖网络图片加载、占位图设置、GIF播放、本地资源加载、图片裁剪、缓存管理等常见场景,并给出了具体代码示例。最后指出Glide适合传统XML项目,Coil适合Jetpack Compose,Fresco擅长处理大图,而Picasso则适用于简单场景。
Glide图片加载库的基本使用
Glide的基本用法(图片加载库)
Android之Glide(非常好用的图片加载框架)
谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。 Glide是一种快速、高效的开源媒体管理和Android的包裹mediadecoding图像加载框架,内存和磁盘缓存和资源集中到一个简单的和易于使用的界面。 Glide是一个开源的图片加载和缓存处理的第三方框架。使用Android的Glide和Android的Picasso库的方式几乎一模一样。
Android 开发 图片网络缓存加载框架Fresco
Android 开发 图片网络缓存加载框架Fresco 简介 Fresco是一个在Android应用程序中显示图像的强大系统。 Fresco负责图像的加载和显示。它将从网络、本地存储或本地资源加载图像,图像加载完成前会显示一个占位图片。它有两个级别的缓存:一...
Android 自己定义ImageView实现圆角/圆形 附加OnTouchListener具体凝视以及Button圆角
转载请注明出处:王亟亟的大牛之路 平时要用一些非方方正正的button之类的小伙伴们是怎样实现的?RadioButton?ImageButton?还是其它? 今天亟亟上的是ImageView来实现的 先上下效果图(文件夹结构) 分析: shape.xml用于Button的”倒角”(做过机械类的都懂,哈哈) attr.xml用于自己定义ImageView的标签...
3467



被折叠的 条评论
为什么被折叠?



