bitmap

android中的Bitmap

﹥>﹥吖頭↗ 提交于 2020-03-26 05:02:37
在Android SDK中可以支持的图片格式如下:png , jpg , gif和bmp。 1.Bitmap的创建 借助于BitmapFactory。 1)资源中的图片 使用BitmapFactory获取位图 Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.testImg); 或者是 Resources res=getResources(); //使用BitmapDrawable获取位图 //使用BitmapDrawable (InputStream is)构造一个BitmapDrawable; //使用BitmapDrawable类的getBitmap()获取得到位图; // 读取InputStream并得到位图 InputStream is=res.openRawResource(R.drawable.testImg); BitmapDrawable bmpDraw=new BitmapDrawable(is); Bitmap bmp=bmpDraw.getBitmap(); 2)SD卡中的图片 Bitmap bmp = BitmapFactory.decodeFile("/sdcard/testBitmap/testImg.png") 2. 把 Bitmap

Glide实现圆角和圆形图片

回眸只為那壹抹淺笑 提交于 2020-03-21 18:52:05
实现圆形图片 , 传参第一个为上下文, 第二个为角度 package com.hh.beauter.util; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; /** * Created by Hh on 2017/1/5. */ public class GlideRoundTransform extends BitmapTransformation { private static float radius = 0f; public GlideRoundTransform(Context context

Android 将Bitmap 保存到本地

亡梦爱人 提交于 2020-03-17 09:44:27
Overview 图片是一个可以使你程序变得比较的美观,所以我们会在我们的软件中使用图片。但是对于图片的操作也是比较的复杂。今天,我们学习一下如是将我们的图片保存到我们的本地。 开发环境 Android Studio 3.6 Android 11 Mac OS 10.15 模拟机 Google Pixel3 API R 然后学习一下如何来完成我们的功能 按照国际管理,我们先来看一下我们的代码: /** * Bitmap 帮助类之一 */ class BitmapUtils { /** * Save Bitmap * * @param name file name * @param bm picture to save */ static void saveBitmap(String name, Bitmap bm, Context mContext) { Log.d("Save Bitmap", "Ready to save picture"); //指定我们想要存储文件的地址 String TargetPath = mContext.getFilesDir() + "/images/"; Log.d("Save Bitmap", "Save Path=" + TargetPath); //判断指定文件夹的路径是否存在 if (!FileUtils.fileIsExist

七、图形与图像处理(1)

旧时模样 提交于 2020-03-17 07:44:05
1 使用简单图片 2 绘图 3 图形特效处理 4 逐帧(Frame)动画 5 补间(Tween)动画 6 属性动画 7 使用SurfaceView实现动画 1、Bitmap和BitmapFactory Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。开发者为了把一个Bitmap对象包装成 BitmapDrawable对象。可以调用BitmapDrawable的构造器: // 把一个Bitmap对象包装成BitmapDrawable对象 BitmapDrawable drawable = new BitmapDrawable(bitmap); 如果需要获取BitmapDrawable所包装的Bitmap对象,则可调用BitmapDrawable的getBitmap(),如下代码所示: // 获取一个BitmapDrawable所包装的Bitmap对象。 Bitmap bitmap = drawable.getBitmap(); 除此之外,Bitmap还提供了一些静态方法来创建新的Bitmap对象,例如如下常用方法。 ● createBitmap(Bitmap source, int x, int y, int width, int height): 从源位图source的指定坐标点(给定x、y)开始,从中"挖取"宽width

统计网站在线人数

拥有回忆 提交于 2020-03-15 08:09:29
如何统计网站的在线人数呢? 首先很简单的思想就是,如果只针对会员用户进行统计,在登录登出时加判断,然后维护一个表(或者其他存储方式)来存储在线会员即可。 但是有个问题就是,对于正常退出的会员当然可以使用这种方式,那如果该会员是关闭了网页或者停电或者其他因素,那如何得知这些情况呢? 1. 维护在线用户表 假设使用数据库来完成这个功能,想要达到最快的速度,就直接使用MYSQL内存表来保存在线会员的记录, 1:当会员登录时(包含自动登录),便去查找该会员是否存在于内存表当中,如果存在,则更新在线表当中的时间,如果不存在,则插入相应数据到内存表当中去 2:在用户退出时,由于没有进行办法实时的更新,因为用户有可能直接关闭网页离开,只能根据时间段来解决这个问题,写一个计划任务,每隔半个小时(或者其他时间),执行一次该程序,该程序主要的作用是扫描当前在线表当中,更新时间是否有小于当前时间10分钟或者多少分钟(这个根据具体情况自定义)的,如果有,则直接删除该条记录,这样便保证了大概的在线人数的统计。 这种做法的缺点,当用户数量很大时,对数据库压力会很大。 2. 使用Redis统计 将第一种方案的数据库改成使用redis,能够减轻数据库的负担,读写也更快。 当然我们可以从另一个角度来看,如果要统计的不仅仅是会员,要统计来访问网站的在线人数,我们可以考虑保存session(详情请查看

Android性能优化--Listview优化

删除回忆录丶 提交于 2020-03-13 15:04:38
ListView 的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个item,要求 adapter “返回一个视图” (getView),也就是说ListView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项。如果你的getCount()返回值是0的话,列表一行都不会显示,如果返回1,就只显示一行。返回几则显示几行。如果我们有几千几万甚至更多的item要显示怎么办?为每个Item创建一个新的View?不可能!!!实际上Android早已经缓存了这些视图,大家可以看下下面这个截图来理解下,这个图是解释ListView工作原理的最经典的图了大家可以收藏下,不懂的时候拿来看看,加深理解,其实Android中有个叫做Recycler的构件,顺带列举下与Recycler相关的已经由Google做过N多优化过的东东比如:AbsListView.RecyclerListener、ViewDebug.RecyclerTraceType等等,要了解的朋友自己查下,不难理解,下图是ListView加载数据的工作原理(原理图看不清楚的点击后看大图)

Delphi GDI对象之绘制位图

邮差的信 提交于 2020-03-13 14:07:50
绘制位图(Drawing Bitmaps) 绘制位图听起来似乎很难,然而如几次所见到的那样,绘制位图非常容易。TCanvas类具有几种方法绘制位图,最常用的方法是Draw方法,这种方法只是在画布上指定位置绘制位图。用户已经见过几个这样的例子。下面是简短的例子。 procedure TForm1.btn1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('type.bmp'); Canvas.Draw(0, 0, Bitmap); Bitmap.Free; end; 这段代码创建了一个TBitmap对象,装载一副BMP位图,并在窗口的最上角显示。 若显示位图不需修改时,可使用Draw方法。 StretchDraw方法用于改变位图的大小。用户在所需绘制的位图和图像位置确定确定一个矩形框。如果所用矩形框大于位图的原始大小,则放大位图;如果矩形框小于位图的原始大小,则缩小位图,这里是一个例子: procedure TForm1.btn2Click(Sender: TObject); var Bitmap: TBitmap; R: TRect; begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile(

搞懂这些面试知识点,吊打面试官

孤者浪人 提交于 2020-03-12 22:33:16
一丶设计模式与使用场景 建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景比如最常见的 AlertDialog,拿我们开发过程中举例,比如 Camera 开发过 程中,可能需要设置一个初始化的相机配置,设置摄像头方向,闪光灯开闭,成 像质量等等,这种场景下就可以使用建造者模式 装饰者模式: 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模 式比生成子类更为灵活。装饰者模式可以在不改变原有类结构的情况下曾强类的 功能,比如 Java 中的 BufferedInputStream 包装 FileInputStream ,举个开发中的 例子,比如在我们现有网络框架上需要增加新的功能,那么再包装一层即可,装 饰者模式解决了继承存在的一些问题,比如多层继承代码的臃肿,使代码逻辑更 清晰 还有等等.......观察者模式, 代理模式,门面模式,单例模式,生产者消费者模式。 二丶java 中的线程创建方式,线程池的工作原理 java 中有三种创建线程的方式,或者说四种 1.继承 Thread 类实现多线程 2.实现 Runnable 接口 3.实现 Callable 接口 4.通过线程池 线程池的工作原理: 线程池可以减少创建和销毁线程的次数,从而减少系统资源 的消耗,当一个任务提交到线程池时 a. 首先判断核心线程池中的线程是否已经满了

记一次位图索引“BITMAP CONVERSION FROM ROWIDS”引起的问题

独自空忆成欢 提交于 2020-03-11 18:26:00
一般的经验OLTP不建议使用位图索引,虽然位图索引可能会提高查询速度,但是如果修改有索引的数据,那索引指向的所有行都会被锁定,这是由于oracle不能锁定位图索引条目中单独的一行,而是锁定整个位图索引条目。 今天研发告诉我一个系统数据总是有问题,排查到某个查询的时候,我看了下执行计划,竟然发现了bitmap,开始还以为是建了位图索引,后来仔细一看是BITMAP CONVERSION FROM ROWIDS,才知道是在一个选择性非常差的列上建了普通索引,导致oracle优化器自动将索引转换成位图索引了。那个列上的索引其实没啥用处,仅仅是由于工程师觉得要用到这个列。如果选择性差的列需要建索引,建议 建联合索引 也能避免这个问题。 来源: CSDN 作者: 肖雪松 链接: https://blog.csdn.net/xiaofeng_rui/article/details/104796398

C#:优化图像像素操作

女生的网名这么多〃 提交于 2020-03-11 10:59:47
以图像阈值化为例: # very slow solution public static unsafe Bitmap ApplyThreshold(Bitmap scrBitmap, int lower_value, int upper_value) { Color newColor = Color.Red; Bitmap newBitmap = new Bitmap(scrBitmap.Width, scrBitmap.Height); //Locking the bitmap's bits allows you to iterate through it's color-data many times faster than using GetPixel, using unsafe code. lock (_imageLock) { var data = scrBitmap.LockBits(new Rectangle(0, 0, scrBitmap.Width, scrBitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); var offset = data.Stride - scrBitmap.Width * 3; var p = (byte*)data.Scan0.ToPointer();