android中图片的处理(绘制圆形,圆角||缩略图)

Android Glide使用姿势与原理分析_安卓 glide 自定义图片压缩策略通过实现接口实现。该接口包含方法,可以在其中定义自定义的压缩操作。// 自定义压缩算法return "customTransformation" // 返回唯一标识符,用于缓存// 自定义压缩算法实现// ....load(url)通过实现接口,你可以根据需求制定不同的压缩算法,以满足特定的图片压缩需求。 阅读详情
    /**
     * 圆角处理
     * 
     * @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;
    }
Android如何设置圆角图片 在开发过程中有时需要将图片显示成圆角图片,一般我们可以通过在xml中设置drawable shape即可,但今天我给出另一种方法,用java代码动态去设置圆角,顺便做个简单的笔记。 主要原理是使用系统自带api: RoundedBitmapDrawableFactory 先上效果图: 由于比较简单,直接给出实现方式: public class MainActivity extends AppCompatActivity { private ImageView mImgRectRound; private ImageView mImgRound; @Override protect 立即下载

相关推荐

Latex下使用JabRef添加参考文献

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 Latex可以手动添加参考文献,但文献过多时,使用JabRef软件相对方便。 提示:以下是本篇文章正文内容,下面案例可供参考 一、JabRef安装 网址:http://www.jabref.org 打开网址后,点击“Download” 进入如下页面后,选择 portable (便携版,无需安装),下载后是一压缩包,打开即可使用。 二、使用 1.创建库 ...

sz3076799的博客 3467

安卓 Android Studio页面布局之 设置圆角矩形样式与使用

最近一段时间正在做的项目中要求设计界面采用卡片式,卡片要有圆角矩形效果。现在记录下具体实现过程。 先上效果图:

jackiesky1206的博客 1万+

关于RTP时间戳以及播放器对时间戳的处理

首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采...

toshiba689的专栏 3052

AndroidStudio 如何设置圆角图片

今天在做公司项目于的时候,要求做一个圆角图片,一开始想法是在imgView设置一个背景弧度,后来发现有些不好,索性百度了下,百度上实现的方法有很多。我选择用Glide的方式实现 贴一个Glide官方地址:Glide官方地址 不得不说,这个库还是非常好用的,用来加载各种图片也非常方面,强烈推荐。在引用这个库的时候官方最新版4.8.0为 有可能会有sdk版本问题,推荐使用3.5.2 https...

Max_Adrew的博客 6890

基于Spring Boot在线远程考试系统的设计与实现

结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

ITbiyesheji的博客 1215

《供应链金融风控模型设计:多维度数据整合与动态风险预警机制》

注:方案突出供应链金融「三流合一」(资金流、物流、信息流)的风控逻辑,通过多维度数据整合与动态预警,解决传统风控中中小企业信用评估难、链条风险传导监测滞后的问题。◦ 构建供应链拓扑图,计算「核心企业违约对上下游企业的影响系数」(如某电子厂商违约时,其前五大供应商的风险权重自动提升40%)• 区块链应用:将核心企业应付账款上链存证,防止「一票多融」欺诈(如某供应商用同一应收账款在多家银行融资)◦ 财务数据:核心企业审计报告、上下游企业纳税数据(增值税发票频次/金额)

2501_91651383的博客 1548

AndroidStudio设置图片圆角

当在Android应用中开发时,经常需要将图片显示为圆角形式,以增强用户界面的美观性和吸引力。本文将介绍如何在Android Studio中实现这一功能,通过几种不同的方法来设置指定图片的圆角效果。2.导入Gradle包: implementation ("com.github.bumptech.glide:glide:4.15.1")通过设置圆形图片和设置圆角,可以把图片设置成圆角。1.将图片加入到布局文件中:使用ImageView控件显示图片。3.在Activity文件写入代码。

2201_75562798的博客 1379

Moviepy自动化剪辑视频中的广告

本教程展示了如何使用 Python 中的 MoviePy 库,通过检测和剪辑广告段落来实现视频内容的清洁播放。通过广告检测算法和 MoviePy 剪辑功能的结合,可以自动化处理视频,极大提升编辑效率。在学习和应用中,理解广告检测的原理及其实现方法尤为重要,以便针对不同类型的视频进行调整。此外,MoviePy 的灵活性使其适用于多种视频编辑场景,适合自动化内容制作与优化。

Mr数据杨 3409

Android实现圆形圆角图片

本文主要使用两种方法实现图形圆角图片 自定View加上使用Xfermode实现 Shader实现 自定View加上使用Xfermode实现/** * 根据原图和变长绘制圆形图片 * * @param source * @param min * @return */ private Bitmap createC

Ricardo的博客 1975

【SpringBoot 4.x 第70节】夯爆了,企业级 API 设计规范落地:状态码、错误码、接口文档与兼容性(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 128

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 88

androidstudio全局图片设置圆角、圆形

public class MyApp extends Application { File file; @Override public void onCreate() { super.onCreate(); String mPath=getExternalCacheDir().getPath()+"/AK"; file = n...

weixin_43915946的博客 4022

Python全栈入门到实战【基础篇 04】核心基础:变量与4种基础数据类型(int/float/str/bool)

本文介绍了Python编程中的变量和四种基础数据类型,作为后续所有语法的入门前提。变量是数据的“容器”,解决数据复用问题,而数据类型决定数据能进行的操作。文章详细讲解了变量的定义语法、命名规则(强制语法和推荐风格)、赋值与修改原理,并通过实操示例展示其应用场景。正确使用变量可以提升代码复用性、简化修改并增强可读性,是编程效率的核心原则。掌握这些基础知识能避免90%的新手语法错误,为学习更复杂的Python语法打下坚实基础。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4308

Android生成圆形缩略图的一种方法

做项目的过程中需将用户头像图片生成圆形的指定大小的drawable对象,用作actionbar的navigation icon。 原始图片是方形的,尺寸144x144,若是直接调用setNavigationIcon()方法,图片将覆盖actionbar的大部分。 综合网上各种制作缩略图和圆形图片的方法,总结出如下个人觉得比较简便的方法,记录下来以备后边用到。 比较简单,直接贴代码 /**

zengnianan的专栏 1039

华为的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、现在分别使用缩略图内存缓存和正图内存缓存,感觉应该可以合并,只使用一套内存缓存。

Zhang Phil 781

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android图片资源加载失败,Android之Glide(非常好用的图片加载框架)

谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。Glide是一种快速、高效的开源媒体管理和Android的包裹mediadecoding图像加载框架,内存和磁盘缓存和资源集中到一个简单的和易于使用的界面。 Glide是一个开源的图片加载和缓存处理的第三方框架。使用Android的Glide和Android的Picasso库的方式几乎一模一样。Glide...

weixin_39996798的博客 1070

最新的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 缓存...

牛八少爷的专栏 2万+

Android 图片加载框架Coil使用总结

文章目录简介简单使用高斯模糊圆角圆形灰色变换 GrayscaleTransformationGif监听下载过程取消下载替换 okhttp 实例自定义Coil 源码分析 简介 Coil 是一个 Android 图片加载库,通过 Kotlin 协程的方式加载图片。特点如下: 更快: Coil 在性能上有很多优化,包括内存缓存和磁盘缓存,把缩略图存保存在内存中,循环利用 bitmap,自动暂停和取消图片网络请求等。 更轻量级: Coil 只有2000个方法(前提是你的 APP 里面集成了 OkHttp 和 Co

赵彦军 1万+

android图片资源加载失败,Android图片加载问题分析

下图是一个客户端图片加载模块常见的处理流程。imagepipeline.png本文以UniversalImageLoader为例分析了这一流程,然后分析了Fresco的优势和问题,最终推荐大家使用Glide。从UniversalImageLoader分析图片加载中需要处理的问题网络主要用于下载网络图片,在UIL中是将图片地址变为InputStream。UIL支持多种类型来源的图片显示,包括:网络文...

weixin_33060757的博客 2390

缩略图和三级缓存

error()方法用于在加载失败时显示的图片,.placeholder()方法用于在加载过程中显示的占位图片。另外,.skipMemoryCache(true)方法用于跳过内存缓存,.diskCacheStrategy(DiskCacheStrategy.ALL)方法用于设置磁盘缓存策略。loadImage方法用于加载普通的图片,loadcircleImage方法用于加载圆形图片,loadcornerImage方法用于加载带有圆角的图片。

buxiangzilv的博客 462

探索圆角图像新境界:RoundImageView

探索圆角图像新境界:RoundImageView 在移动应用开发领域,细节的雕琢往往是用户体验提升的关键。对于 Android 开发者而言,处理图片展示时,给图片加上圆角效果是一个常见的需求。今天,我们为您推荐一款小巧而功能强大的开源项目 —— RoundImageView。它不仅完美支持矢量图,还提供了高度定制化的选项,让您的应用界面焕然一新。 项目介绍 RoundImageView 是一个简洁...

gitblog_01067的博客 375

Android入门到实战(六):Android主流图片加载框架

本文介绍了Android开发中常用的图片加载框架及其适用场景。主流框架包括功能全面的Glide、轻量级的Picasso、适合大图的Fresco和Kotlin原生的Coil,开发者可根据项目需求选择。文章重点讲解了最常用的Glide框架,提供了一份实用速查表,涵盖网络图片加载、占位图设置、GIF播放、本地资源加载、图片裁剪、缓存管理等常见场景,并给出了具体代码示例。最后指出Glide适合传统XML项目,Coil适合Jetpack Compose,Fresco擅长处理大图,而Picasso则适用于简单场景。

weixin_39339407的博客 1503

Glide图片加载库的基本使用

Glide的基本用法(图片加载库)

mm731296278的博客 1098

Android之Glide(非常好用的图片加载框架)

谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。 Glide是一种快速、高效的开源媒体管理和Android的包裹mediadecoding图像加载框架,内存和磁盘缓存和资源集中到一个简单的和易于使用的界面。 Glide是一个开源的图片加载和缓存处理的第三方框架。使用Android的Glide和Android的Picasso库的方式几乎一模一样。

切切歆语的博客 3727

Android 开发 图片网络缓存加载框架Fresco

Android 开发 图片网络缓存加载框架Fresco 简介   Fresco是一个在Android应用程序中显示图像的强大系统。 Fresco负责图像的加载和显示。它将从网络、本地存储或本地资源加载图像,图像加载完成前会显示一个占位图片。它有两个级别的缓存:一...

weixin_30793643的博客 136

Android 自己定义ImageView实现圆角/圆形 附加OnTouchListener具体凝视以及Button圆角

转载请注明出处:王亟亟的大牛之路 平时要用一些非方方正正的button之类的小伙伴们是怎样实现的?RadioButton?ImageButton?还是其它? 今天亟亟上的是ImageView来实现的 先上下效果图(文件夹结构) 分析: shape.xml用于Button的”倒角”(做过机械类的都懂,哈哈) attr.xml用于自己定义ImageView的标签...

weixin_30950607的博客 112
上一篇: 生产者消费者模式
下一篇: android httpClient 支持HTTPS的处理方式
Allen-华
博客等级 码龄11年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值