2 zy1235678 zy1235678 于 2012.12.28 10:50 提问

位图在android中的是使用有哪些,另外有什么好处

位图在android中哪些地方使用,另外位图有什么好处。

现在仅知道:
1. 在画布上绘制位图
2. 缩放位图
3. 使用Matrix变换位图

12个回答

Sueyexin
Sueyexin   2012.12.28 11:29

bitmap一般是处理图片的,复制图片,显示图片都会用到

franzhong
franzhong   2012.12.28 11:33

位图是对应于矢量图的
详细区别与各自优缺点见以下链接
http://zkl-1987.iteye.com/blog/1060902

yiranwujixian
yiranwujixian   2012.12.28 11:34

位图是我们开发中最常用的资源,毕竟一个漂亮的界面对用户是最有吸引力的。按照对位图的操作,分为以下几个功能分别介绍:

  • 从资源中获取位图
  • 获取位图的信息
  • 显示位图
  • 位图缩放
  • 位图旋转

1. 从资源中获取位图

可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。
当然,首先需要获取资源: Resources res=getResources();
使用BitmapDrawable获取位图

  1. 使用BitmapDrawable (InputStream is)构造一个BitmapDrawable;
  2. 使用BitmapDrawable类的getBitmap()获取得到位图;
    通过Resource的函数:InputStream openRawResource(int id)获取得到资源文件的数据流后,也可以通过2种方法来获取Bitmap,如下:
    使用BitmapDrawable

    (A Drawable that wraps a bitmap and can be tiled, stretched, or aligned.)

使用BitmapDrawable (InputStream is)构造一个BitmapDrawable;
使用BitmapDrawable类的getBitmap()获取得到位图;
BitmapDrawable也提供了显示位图等操作。
Java代码:

InputStream is=res.openRawResource(R.drawable.pic180);  // 读取资源文件获取输入流 
BitmapDrawable bmpDraw=new BitmapDrawable(is);   
Bitmap bmp=bmpDraw.getBitmap(); 

或者:

BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic180);   
Bitmap bmp=bmpDraw.getBitmap(); 

使用BitmapFactory

(Creates Bitmap objects from various sources, including files, streams, and byte-arrays.)

使用BitmapFactory类decodeStream(InputStream is)解码位图资源,获取位图。
使用BitmapFactory类Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); 方法解码位图资源。
BitmapFactory的所有函数都是static,这个辅助类可以通过资源ID、路径、文件、数据流等方式来获取位图。
以上方法在编程的时候可以自由选择,在Android SDK中说明可以支持的图片格式如下:png (preferred), jpg (acceptable), gif (discouraged),虽然bmp格式没有明确说明,但是在Android SDK Support Media Format中是明确说明了。

2. 获取位图的信息

要获取位图信息,比如位图大小、是否包含透明度、颜色格式等,获取得到Bitmap就迎刃而解了,这些信息在Bitmap的函数中可以轻松获取到。Android SDK中对Bitmap有详细说明,阅读起来也比较容易,不在此详细说明,这里只是辅助说明以下2点:
在Bitmap中对RGB颜色格式使用Bitmap.Config定义,仅包括ALPHA_8、ARGB_4444、ARGB_8888、RGB_565,缺少了一些其他的,比如说RGB_555,在开发中可能需要注意这个小问题;
Bitmap还提供了compress()接口来压缩图片,不过AndroidSAK只支持PNG、JPG格式的压缩;其他格式的需要Android开发人员自己补充了。

3. 显示位图

显示位图可以使用核心类Canvas,通过Canvas类的drawBirmap()显示位图,或者借助于BitmapDrawable来将Bitmap绘制到Canvas。当然,也可以通过BitmapDrawable将位图显示到View中。
转换为BitmapDrawable对象显示位图

 // 获取位图 
    Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic180); 
    // 转换为BitmapDrawable对象 
    BitmapDrawable bmpDraw=new BitmapDrawable(bmp); 
    // 显示位图 
    ImageView iv2 = (ImageView)findViewById(R.id.ImageView02); 
   iv2.setImageDrawable(bmpDraw); 

使用Canvas类显示位图
这儿采用一个继承自View的子类Panel,在子类的OnDraw中显示
Java代码

public class MainActivity extends Activity {   

    @Override  
    public void onCreate(Bundle savedInstanceState) {   
        super.onCreate(savedInstanceState);   
        setContentView(new Panel(this));   
    }   

    class Panel extends View{            
        public Panel(Context context) {     
            super(context);    
        }         
        public void onDraw(Canvas canvas){     
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180);     
            canvas.drawColor(Color.BLACK);     
            canvas.drawBitmap(bmp, 10, 10, null);     
        }     
    }    
}  

4. 位图缩放

(1)将一个位图按照需求重画一遍,画后的位图就是我们需要的了,与位图的显示几乎一样:drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)。
(2)在原有位图的基础上,缩放原位图,创建一个新的位图:CreateBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
(3)借助Canvas的scale(float sx, float sy) (Preconcat the current matrix with the specified scale.),不过要注意此时整个画布都缩放了。
(4)借助Matrix:
Java代码

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic180);     
Matrix matrix=new Matrix();   
matrix.postScale(0.2f, 0.2f);   
Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(), 
bmp.getHeight(),matrix,true);   
canvas.drawColor(Color.BLACK);     
canvas.drawBitmap(dstbmp, 10, 10, null);   

5. 位图旋转

同样,位图的旋转也可以借助Matrix或者Canvas来实现。Matrix在线性代数中都学习过,Android SDK提供了Matrix类,可以通过各种接口来设置矩阵。结合上面的例子程序,将位图缩放例子程序在显示位图的时候前,增加位图旋转功能,修改代码如下:

Matrix matrix = new Matrix(); 
//matrix.postScale(0.5f, 0.5f); 
matrix.setRotate(90,120,130); 
canvas.drawBitmap(mbmpTest, matrix, mPaint); 

旋转后的位图显示如下:

除了这种方法之外,我们也可以在使用Bitmap提供的函数如下:
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter),在原有位图旋转的基础上,创建新位图。

总结说明

对位图的操作,结合Android SDK中的类,详细的介绍完了。最后还需要强调的是:这篇文章只是对Android SDK中代码阅读分析,它代替不了你阅读Android SDK,深入的学习还是要仔细的阅读Android SDK。


以上内容转自:http://burnquist.iteye.com/blog/1450814

hooopo
hooopo 标题是:### 分割线是:---
5 年多之前 回复
yiranwujixian
yiranwujixian 类似标题的那个咋弄的?还有那个华丽丽的分隔线?
5 年多之前 回复
hooopo
hooopo 帮你编辑了一下:-)
5 年多之前 回复
myhaikuotiankong
myhaikuotiankong   2014.11.22 15:35

位图实际就是点阵图。。。

donxiaojie123
donxiaojie123   2014.11.22 20:18

位图的好处:它能够制作出颜色和色调变化丰富的图像,可以逼真地表现出自然界的景观

ctest151
ctest151   2014.11.26 09:23

位图的好处:它能够制作出颜色和色调变化丰富的图像,可以逼真地表现出自然界的景观

qq_23963491
qq_23963491   2014.11.26 21:04

sdfsdffsdasdfafsdadfsa

tz2014fs2014
tz2014fs2014   2014.11.27 21:46

java对英文要求蛮高的。而.net只要不深究。几乎用不上英文。而学习java的人也是最多的。这两门语言哪门竟争小一些呢。

mc616
mc616   2014.11.29 12:13

: vip开通后依然提示开通呢,无法免积分下载,输入资源号码的方式也下不了

mc616
mc616   2014.11.29 12:15

bitmap一般是处理图片的,复制图片,显示图片都会用到

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!