Pixel,Bitmap,Drawable,Canvas,Paint,Matrix,BitmapDrawable,BitmapFactory图相关

本文主要是介绍Pixel,Bitmap,Drawable,Canvas,Paint,Matrix,BitmapDrawable,BitmapFactory图相关,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pixel

      像素,又称画素,为图像显示的基本单位。每个像素可有各自的颜色值,可采用三原色显示,因而又分成红、绿、蓝三种子像素(RGB色域),或者青、品红、黄和黑(CMYK色域,印刷行业以及打印机中常见)。照片是一个个采样点的集合,故而单位面积内的像素越多代表解析度越高,所显示的图像就会接近于真实物体。由像素组成的图像称为Bitmap(位图)。通常来说,对于一个显示屏幕,一个点就对应一个像素。


Bitmap

称作位图,又称栅格图(英语:Raster graphics)或称点阵图,是使用像素阵列来表示的图像,每个像素的颜色信息由RGB组合或者灰度值表示。根据颜色信息所需的数据位分为1、4、8、16、24及32位等,位数越高颜色越丰富,相应的数据量越大。其中使用1位表示一个像素颜色的位图因为一个数据位只能表示两种颜色,所以又称为二值位图。通常使用24位RGB组合数据位表示的的位图称为真彩色位图。一般来说,位图是没有经过压缩的,位图文件体积比较大。(位图常用的压缩算法是通过“索引颜色表”实现的),位图大多支持alpha通道(透明通道)。

常用方法:
static Bitmap     createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)  
//Returns an immutable bitmap from subset of the source bitmap, transformed by the optional matrix.   
static Bitmap     createBitmap(int width, int height, Bitmap.Config config)  
//Returns a mutable bitmap with the specified width and height.   
static Bitmap     createBitmap(Bitmap source, int x, int y, int width, int height)  
//Returns an immutable bitmap from the specified subset of the source bitmap.   
static Bitmap     createBitmap(int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)  
//Returns a immutable bitmap with the specified width and height, with each pixel value set to the corresponding value in the colors array.   
static Bitmap     createBitmap(Bitmap src)  
//Returns an immutable bitmap from the source bitmap.   
static Bitmap     createBitmap(int[] colors, int width, int height, Bitmap.Config config)  
//Returns a immutable bitmap with the specified width and height, with each pixel value set to the corresponding value in the colors array.   
static Bitmap     createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter)  
//Creates a new bitmap, scaled from an existing bitmap, when possible.  

从资源文件中获取:Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic); 

Drawable转化为Bitmap:
private Bitmap bitmap;
private void drawableToBitamp(Drawable drawable)
    {
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();
        System.out.println("Drawable转Bitmap");
        Bitmap.Config config = 
                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                        : Bitmap.Config.RGB_565;
        bitmap = Bitmap.createBitmap(w,h,config);
        //注意,下面三行代码要用到,否在在View或者surfaceview里的canvas.drawBitmap会看不到图
        Canvas canvas = new Canvas(bitmap);   
        drawable.setBounds(0, 0, w, h);   
        drawable.draw(canvas);
    }

另外一种思想:

public static Bitmap drawableToBitmap(Drawable drawable) {        
        Bitmap bitmap = Bitmap
                        .createBitmap(
                                        drawable.getIntrinsicWidth(),
                                        drawable.getIntrinsicHeight(),
                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                                        : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        //canvas.setBitmap(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
}

从资源文件中得到Bitmap:
private Bitmap bitmap;
private void drawableToBitamp(Drawable drawable)
    {
        BitmapDrawable bd = (BitmapDrawable) drawable;

        bitmap = bd.getBitmap();
    }

BitmapFactory

工厂类是一个工具类,提供了大量的方法,大多数是从不同的数据源来解码、创建Bitmap对象

static Bitmap   decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)  
//Decode an immutable bitmap from the specified byte array.   
//解析byte[]   
static Bitmap   decodeByteArray(byte[] data, int offset, int length)  
//Decode an immutable bitmap from the specified byte array.   
static Bitmap   decodeFile(String pathName)  
//Decode a file path into a bitmap.   
static Bitmap   decodeFile(String pathName, BitmapFactory.Options opts)  
//Decode a file path into a bitmap.   
static Bitmap   decodeFileDescriptor(FileDescriptor fd)  
//Decode a bitmap from the file descriptor.   
static Bitmap   decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)  
//Decode a bitmap from the file descriptor.   
static Bitmap   decodeResource(Resources res, int id, BitmapFactory.Options opts)  
//Synonym for opening the given resource and calling decodeResourceStream(Resources, TypedValue, InputStream, Rect, BitmapFactory.Options).   
static Bitmap   decodeResource(Resources res, int id)  
//Synonym for decodeResource(Resources, int, android.graphics.BitmapFactory.Options) will null Options.   
static Bitmap   decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, BitmapFactory.Options opts)  
//Decode a new Bitmap from an InputStream.   
static Bitmap   decodeStream(InputStream is)  
//Decode an input stream into a bitmap.   
static Bitmap   decodeStream(InputStream is, Rect outPadding, BitmapFactory.Options opts)  
//Decode an input stream into a bitmap.  


BitmapDrawable

继承于Drawable
//方法一   
Resources res;  
InputStream is=res.openRawResource(R.drawable.pic);  
BitmapDrawable bitmapDrawable=new BitmapDrawable(is);  
Bitmap bmp=bitmapDrawable.getBitmap();    
//方法二   Resources res;  
BitmapDrawable bitmapDrawable=(BitmapDrawable)res.getDrawable(R.drawable.pic);  
Bitmap bmp=bitmapDrawable.getBitmap();    
//方法三   

ImageView image;  
image.setImageBitmap(BitmapFactory.decodeStream(~~~~));  
BitmapDrawable bitmapDrawable=(BitmapDrawable)image.getDrawable();  
Bitmap bmp=bitmapDrawable.getBitmap();  


Drawable

当在Android工程的Drawable文件夹中导入图像文件时,Android SDK会为这个文件生成一个Drawable对象。可以通过R.drawable的方式访问这个对象。一般是调用Resource.getDrawable(int id)的方式直接获取。
Drawable 文件夹支持的图像格式有GIF、PNG、JPG,BMP。


Bitmap转为Drawable:
BitmapDrawable bitmapDrawable= new BitmapDrawable(bitmap)   
 因为BtimapDrawable是Drawable的子类,最终直接使用bitmapDrawable即可。  

bitmap转为Canvas,Canvas转为Drawable

Canvas canvas = new Canvas(bitmap);   
drawable.setBounds(0, 0, w, h);   
drawable.draw(canvas);


Canvas Paint
理解Canvas对象,可以把它当做画布,Canvas的方法大多数是设置画布的大小、形状、画布背景颜色等等,要想在画布上面画画,一般要与Paint对象结合使用,顾名思义,Paint就是画笔的风格,颜料的色彩之类的。


Matrix
Matrix为矩阵的意思,一般用来与Bitmap配合,实现图像的缩放、变形、扭曲等操作。
public static Bitmap scaleBitmap(Bitmap bitmap, int scalWidth, int scaleHeight) {    
        int w = bitmap.getWidth();    
        int h = bitmap.getHeight();    
        // 创建操作图片用的Matrix对象     
        Matrix matrix = new Matrix();    
        // 计算缩放比例     
        float sx= ((float) scaleWidth / w);    
        float sy= ((float) scaleHeight / h);    
        // 设置缩放比例     
        matrix.postScale(sx, sy);    
        // 建立新的bitmap,其内容是对原bitmap的缩放后的图    
        Bitmap scaleBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);    
        return scaleBmp;    
    }    
Matrix类的其他典型方法。
boolean  postScale(float sx, float sy)//缩放   
boolean     postSkew(float kx, float ky)//扭曲   
boolean     postTranslate(float dx, float dy)//转换   
boolean     preConcat(Matrix other)//合并   
boolean     preRotate(float degrees)//旋转  



Bitmap2Bytes
public byte[] Bitmap2Bytes(Bitmap bmp) {    
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();    
        //public boolean compress (Bitmap.CompressFormat format, int quality, OutputStream stream)   
        bmp.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream );    
        return byteArrayOutputStream.toByteArray();    
    }    

另外一种兼容代码:

private byte[] Bitmap2Bytes(Bitmap bm){
 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
 bm.compress(Bitmap.CompressFormat.PNG, 100, baos); 
 return baos.toByteArray();
 }
Bytes2Bitmap
static Bitmap   decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts)  
//Decode an immutable bitmap from the specified byte array.   
//解析byte[]  

另外一种兼容代码:

private Bitmap Bytes2Bimap(byte[] b){
   if(b.length!=0){
    return BitmapFactory.decodeByteArray(b, 0, b.length);
   }
   else {
    return null;
   }
 }

这篇关于Pixel,Bitmap,Drawable,Canvas,Paint,Matrix,BitmapDrawable,BitmapFactory图相关的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021734

相关文章

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学