有关位图的几点总结
【摘要】
位图是我们开发中最常用的资源
1. 从资源中获取位图 可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。 首先,需要获取资源:
Resources res=getResources();(1)使用BitmapDrawable获取位图
// 读取InputStream并得到位图InputSt...
位图是我们开发中最常用的资源
1. 从资源中获取位图
可以使用BitmapDrawable或者BitmapFactory来获取资源中的位图。
首先,需要获取资源:
Resources res=getResources();
// 读取InputStream并得到位图
InputStream is=res.openRawResource(R.drawable.pic);
BitmapDrawable bmpDraw=new BitmapDrawable(is);
Bitmap bmp=bmpDraw.getBitmap();
BitmapDrawable bmpDraw=(BitmapDrawable)res.getDrawable(R.drawable.pic);
Bitmap bmp=bmpDraw.getBitmap();
包括文件,流,字节数组
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new BmpPanel(this));
}
class BmpPanel extends View{
public BmpPanel(Context context) {
super(context);
}
public void onDraw(Canvas canvas){
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
//canvas.drawColor(Color.BLACK);
canvas.drawBitmap(bmp, 10, 10, null);
}
}
}
// 获取位图
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
// 转换为BitmapDrawable对象
BitmapDrawable bmpDraw=new BitmapDrawable(bmp);
// 显示位图
ImageView iv = (ImageView)findViewById(R.id.ImageView);
iv.setImageDrawable(bmpDraw);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
Matrix matrix=new Matrix();
matrix.postScale(0.5f, 0.5f);
Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,true);
//canvas.drawColor(Color.BLACK);
canvas.drawBitmap(dstbmp, 10, 10, null);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
Matrix matrix=new Matrix();
matrix.postScale(0.8f, 0.8f);
matrix.postRotate(45);
Bitmap dstbmp=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),
bmp.getHeight(),matrix,true);
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(dstbmp, 10, 10, null);
* /**
* * create the bitmap from a byte array
* *
* * @param src the bitmap object you want proecss
* * @param watermark the water mark above the src
* * @return return a bitmap object ,if paramter's length is 0,return null
* */
* private Bitmap createBitmap( Bitmap src, Bitmap watermark )
* {
* String tag = "createBitmap";
* Log.d( tag, "create a new bitmap" );
* if( src == null )
* {
* return null;
* }
*
* int w = src.getWidth();
* int h = src.getHeight();
* int ww = watermark.getWidth();
* int wh = watermark.getHeight();
* //create the new blank bitmap
* Bitmap newb = Bitmap.createBitmap( w, h, Config.ARGB_8888 );//创建一个和src大小一样的空位图
* Canvas cv = new Canvas( newb );
* //draw src into
* cv.drawBitmap( src, 0, 0, null );//在 0,0坐标开始画入src
* //draw watermark into
* cv.drawBitmap( watermark, w - ww + 5, h - wh + 5, null );//在src的右下角画入水印
* //save all clip
* cv.save( Canvas.ALL_SAVE_FLAG );//保存
* //store
* cv.restore();//存储
* return newb;
* }
int px = getMeasuredWidth();
int py = getMeasuredWidth();
// Draw background
canvas.drawRect(0, 0, px, py, backgroundPaint);
canvas.save();
canvas.rotate(90, px/2, py/2);
// Draw up arrow
canvas.drawLine(px / 2, 0, 0, py / 2, linePaint);
canvas.drawLine(px / 2, 0, px, py / 2, linePaint);
canvas.drawLine(px / 2, 0, px / 2, py, linePaint);
canvas.restore();
// Draw circle
canvas.drawCircle(px - 10, py - 10, 10, linePaint);
效果如图1所示:

如果我们不调用save和restore会是什么样子呢?如图2所示:

从这两个图中,我们就能看到圆圈位置的明显差异。不进行Canvas的save和restore操作的话,所有的图像都是在画布旋转90°后的画布上绘制的。当执行完onDraw方法,系统自动将画布恢复回来。save和restore操作执行的时机不同,就能造成绘制的图形不同。
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/8557393
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)