Android中 Bitmap Drawable Paint的获取、转换以及使用
系列连续的图片,img_0.png, img_1.png, img_2.png ...
如果要动态获取这些图片,通过&R.drawable.img_x&的ID方式指定是不行的,因为这个ID无法动态变化,即你是无法通过字符串拼接的方法来实现的。
但可以通过下面方式获取:
String imgname = &img_& +
int imgid = getResources().getIdentifier(imgname, &drawable&, &com.vtion.sleb.activities&);
EditText.setBackgroundResource(imgid);
根据传递的idx的值不同,就可以动态的获取img_x所对应名称的图片资源了。
参数:imgname:为drawable文件夹中图片的名称--不包括后缀.png & .jpg 等。
其中&com.vtion.sleb.activities&指的是你的package name,就是文件最开始一行的那个。
一、概念区别
Bitmap - 称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB8888。作为一种逐像素的显示对象执行效率高,但是缺点也很明显存储效率低。我们理解为一种存储对象比较好。
Drawable - 作为平下通用的图形对象,它可以装载常用格式的图像,比如GIF、PNG、JPG,当然也支持BMP,当然还提供一些高级的可视化对象,比如渐变、图形等。
Canvas - 名为画布,我们可以看作是一种处理过程,使用各种方法来管理Bitmap、GL或者Path路径,同时它可以配合Matrix矩阵类给图像做旋转、缩放等操作,同时Canvas类还提供了裁剪、选取等操作。
Paint - 我们可以把它看做一个画图工具,比如画笔、画刷。他管理了每个画图工具的字体、颜色、样式。
二、Android读取不同位置(drawable,asset,SDCard)的图片资源
已将图片保存到drawable目录下,通过图片id获得Drawable或者Bitmap,此方式最常用。(若只知道图片的名称,还可以通过图片的名称获得图片的id)
(1)通过图片id获得Drawable
Drawable drawable=getResource().getDrawable(R.drawable.xxx);
(2)通过图片id获得Bitmap
Resource res=gerResource();
Bitmap bitmap=BitmapFactory.decodeResource(res, id);
(3)通过图片的名称获得图片的id(两种方法)
int id =res.getIdentifier(name, defType, defPackage); //name:图片的名,defType:资源类型(drawable,string。。。),defPackage:工程的包名
Drawable drawable=getResource().getDrawable(id);
已将图片保存到assest目录下,知道图片的名称,通过inputstream获得图片Drawabl
或者 Bitmap
AssetManager asm=getAssetMg();
InputStream is=asm.open(name);//name:图片的名称
(1)获得Drawable
Drawable da = Drawable.createFromStream(is, null);
(2)获得Bitmap
Bitmap bitmap=BitmapFactory.decodeStream(is);
方式三: 图片保存在sdcard,通过图片的路径h
String imgFilePath = Environment.getExternalStorageDirectory().toString()
+ &/DCIM/device.png&;
(1)文件输入流
fis = new FileInputStream(new File(imgFilePath));//文件输入流
Bitmap bmp = BitmapFactory.decodeStream(fis);
ImageView iv = (ImageView) findViewById(R.id.image);
Bitmap bit = BitmapFactory.decodeFile(&/sdcard/android.bmp&);
iv.setImageBitmap(bit);
iv.setImageDrawable(Drawable.createFromPath(new File(Environment.getExternalStorageDirectory(), &camera.jpg&).getAbsolutePath()));
三、Drawable、Bitmap、byte[]之间的转换
1) & & &Drawble转Bitmap
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);
2) 从资源中获取Bitmap
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.pic);
3) Bitmap & byte[]
private byte[] Bitmap2Bytes(Bitmap bm){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
return baos.toByteArray();
4) byte[] & Bitmap
private Bitmap Bytes2Bimap(byte[] b){
if(b.length!=0){
return BitmapFactory.decodeByteArray(b, 0, b.length);
//将assets文件中资源取出,并将图片从bitmap转换成drawable格式
public static Drawable getDrawableFromAssetFile(Context context,String fileName){
Bitmap image =
BitmapDrawable drawable=
AssetManager am = context.getAssets();
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
drawable= new BitmapDrawable(context.getResources(), image);
is.close();
}catch(Exception e){
四、APK程序里的drawable&hdpi、drawable&mdpi、drawable&ldpi详解
自己DIY过APK程序的达人们肯定会对于android中放置图片的地方drawable&hdpi、drawable&mdpi、drawable&ldpi这三个感到好奇。肯定心里会想,放在哪一个都行,只要是在android中的res目录下的drawable中就行,会自己找到。有心的朋友肯定会他把弄个究竟。我以前对drawable&hdpi、drawable&mdpi、drawable&ldpi这三个也了解了一下,但是只是字面上的,没有真正理解透彻,到今天我才算有稍深点的理解。drawable&hdpi看他的单词名肯定知道他是放置高分辨率的图片,drawable&mdpi放置中等分辨率的图片,drawable&ldpi放置低分辨率的图片。大部分人都把的图片放在drawable&mdpi中。起初我认为随便将图片放置在三个当中的任意一个都行,但是今天我知道了。在分辨率低于480*800时把图片放在drawable&mdpi中是不会有什么影响,但是当分辨率为420*800或高于它时就会出问题了。你的手机屏幕有那么大但是他会将图片拉伸,当加载图片后让你感觉该屏幕没有实际的大小,而如果将图片放到drawable&hdpi中则该问题就不会存在了。比如手机屏幕的大小为420*800如果你将图片放在drawable&mdpi中,那么你就要准备一张340*525分辨率的图片,今天我就遇到了,很是让我郁闷当时我还以为屏幕有误差,查阅其他代码后才发现自己把图片放错了位置。
1)不同的layout
Android手机屏幕大小不一,有480&320, 640&360, 800&480.怎样才能让App自动适应不同的屏幕呢?
其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640&360,layout-800&480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
2)hdpi、mdpi、ldpi
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480&800),FWVGA (480&854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320&480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240&320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
3)横屏竖屏
以下步骤是网上流传的,不过我自己之前是通过图形化界面实现这个配置,算是殊途同归,有空我会把图片贴上来。
还要说明一点:每个activity都有这个属性screenOrientation,每个activity都需要设置,可以设置为竖屏(portrait),也可以设置为无重力感应(nosensor)。
要让程序界面保持一个方向,不随手机方向转动而变化的处理办法:
在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation=&landscape&。
例如(landscape是横向,portrait是纵向):
对于Android游戏开发我们不得不像iPhone那样思考兼容 Android平板电脑,对于苹果要考虑iPad、iPhone 3GS和iPhone 4等屏幕之间的兼容性,对于几乎所有的分辨率总结了大约超过20中粉笔阿女郎的大小和对应关系,对于开发Android游戏而言可以考虑到未来的3.0以及很多平板电脑的需要。
常规的我们可能只考虑QVGA,HVGA,WVGA,FWVGA和DVGA,但是抛去了手机不谈,可能平板使用类似WSVGA的以及WXGA的等等。
QVGA = 320 * 240;
WQVGA = 320 * 480;
WQVGA2 = 400 * 240;
WQVGA3 = 432 * 240;
HVGA = 480 * 320;
VGA = 640 * 480;
WVGA = 800 * 480;
WVGA2 = 768 * 480;
FWVGA = 854 * 480;
DVGA = 960 * 640;
PAL = 576 * 520;
NTSC = 486 * 440;
SVGA = 800 * 600;
package com.vtion.sleb.banca.
import java.io.ByteArrayOutputS
import java.io.InputS
import android.content.C
import android.content.res.AssetM
import android.content.res.R
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.PixelF
import android.graphics.drawable.BitmapD
import android.graphics.drawable.D
public class BitmapUtil {
Drawble转Bitmap
* @param drawable
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);
从资源中获取Bitmap
* @param context
* @param id
Drawable的id
public static Bitmap getBitmapFromRes(Context context, int id) {
Resources res = context.getResources();
Bitmap bmp = BitmapFactory.decodeResource(res, id);
Bitmap & byte[]
* @param bm
private byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.pressFormat.PNG, 100, baos);
return baos.toByteArray();
byte[] & Bitmap
* @param b
private Bitmap Bytes2Bimap(byte[] b) {
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
* 将assets文件中资源取出,并将图片从bitmap转换成drawable格式
* @param context
* @param fileName
public static Drawable getDrawableFromAssetFile(Context context, String fileName) {
Bitmap image =
BitmapDrawable drawable =
AssetManager am = context.getAssets();
InputStream is = am.open(fileName);
image = BitmapFactory.decodeStream(is);
drawable = new BitmapDrawable(context.getResources(), image);
is.close();
} catch (Exception e) {
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&android中怎么把图片资源(png,jpg 等等)转换成 byte数组_百度知道Android处理图像数据转换的各种方法
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android处理图像数据转换的各种方法,本文讲解了RGB值转Bitmap、Color值转Bitmap、字节数组转Bitmap、读取文件转Bitmap、读取资源转Bitmap、输入流转Bitmap等内容,需要的朋友可以参考下
Android中处理图像是一件很常见的事情,这里记录备忘一些亲身使用过的处理图片数据的方法。
转为Bitmap
RGB值转Bitmap
private Bitmap createColorBitmap(String rgb, int width, int height) {
&&&&& Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
&&&&& int color = Color.parseColor(rgb);
&&&&& bmp.eraseColor(color);
Bitmap bmp = createColorBitmap("#cce8cf", 200, 50);
Color值转Bitmap
private Bitmap createColorBitmap(int color, int width, int height) {
& Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
& bmp.eraseColor(color);
Bitmap bmp = createColorBitmap(Color.BLUE, 200, 50);
字节数组转Bitmap
private Bitmap getBitmapFromByteArray(byte[] array) {
& return BitmapFactory.decodeByteArray(array, 0, array.length);
读取文件转Bitmap
private Bitmap getBitmapFromFile(String pathName) {
&&&&& return BitmapFactory.decodeFile(pathName);
读取资源转Bitmap
private Bitmap getBitmapFromResource(Resources res, int resId) {
&&&&& return BitmapFactory.decodeResource(res, resId);
输入流转Bitmap
private Bitmap getBitmapFromStream(InputStream inputStream) {
&&&&& return BitmapFactory.decodeStream(inputStream);
Drawable转Bitmap
Bitmap icon = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon_resource);
转为Drawable
资源转Drawable
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
Bitmap转Drawable
Drawable d = new BitmapDrawable(getResources(),bitmap);
图片圆角展示
通过对图片数据bitmap进行处理即可,其中pixels为边角的半径。
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, int pixels) {
&&&&&&& Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
&&&&&&&&&&&&&&& .getHeight(), Config.ARGB_8888);
&&&&&&& Canvas canvas = new Canvas(output);
&&&&&&& final int color = 0xff424242;
&&&&&&& final Paint paint = new Paint();
&&&&&&& final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
&&&&&&& final RectF rectF = new RectF(rect);
&&&&&&& final float 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);
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具