Android raw 格式转 bmp 图像

raw 保存的为裸数据,转换时都需要把它转成RGBA 的方式来显示。其中:

  8位RAW: 四位RGBA 来表示一位灰度;

  24位RAW: 三位RGB相同,A(alpha)用0XFF表示。

Bitmap.Config 枚举说明:

  位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真。

  • ALPHA_8        代表8位Alpha位图
  • ARGB_4444    代表16位ARGB位图
  • ARGB_8888    代表32位ARGB位图
  • RGB_565        代表8位RGB位图

实现如下

 import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer; import android.graphics.Bitmap; /**
* Raw转Bitmap
*
* @author ChenRui
*
*/
public class RawToBitMap
{
/**
* 从流中读取数组
*
* @param stream
* 输入流
* @return
*/
public static byte[] readByteArrayFormStream(InputStream stream)
{
try
{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
int len = 0;
byte[] tmp = new byte[1024];
while ((len = stream.read(tmp)) != -1)
{
outStream.write(tmp, 0, len);
} byte[] data = outStream.toByteArray(); return data;
}
catch (IOException e)
{
e.printStackTrace();
return new byte[0];
}
} /**
* 8位灰度转Bitmap
*
* 图像宽度必须能被4整除
*
* @param data
* 裸数据
* @param width
* 图像宽度
* @param height
* 图像高度
* @return
*/
public static Bitmap convert8bit(byte[] data, int width, int height)
{
byte[] Bits = new byte[data.length * 4]; //RGBA 数组 int i;
for (i = 0; i < data.length; i++)
{
// 原理:4个字节表示一个灰度,则RGB = 灰度值,最后一个Alpha = 0xff;
Bits[i * 4] = Bits[i * 4 + 1] = Bits[i * 4 + 2] = data[i];
Bits[i * 4 + 3] = -1; //0xff
} // Bitmap.Config.ARGB_8888 表示:图像模式为8位
Bitmap bmp = Bitmap
.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bmp.copyPixelsFromBuffer(ByteBuffer.wrap(Bits)); return bmp;
} /**
* 24位灰度转Bitmap
*
* 图像宽度必须能被4整除
*
* @param data
* 裸数据
* @param width
* 图像宽度
* @param height
* 图像高度
* @return
*/
public static Bitmap convert24bit(byte[] data, int width, int height)
{
byte[] Bits = new byte[data.length * 4]; //RGBA 数组 int i; // data.length / 3 表示 3位为一组
for (i = 0; i < data.length / 3; i++)
{
// 原理:24位是有彩色的,所以要复制3位,最后一位Alpha = 0xff;
Bits[i * 4] = data[i * 3];
Bits[i * 4 + 1] = data[i * 3 + 1];
Bits[i * 4 + 2] = data[i * 3 + 2];
Bits[i * 4 + 3] = -1;
} // Bitmap.Config.ARGB_8888 表示:图像模式为8位
Bitmap bmp = Bitmap
.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bmp.copyPixelsFromBuffer(ByteBuffer.wrap(Bits)); return bmp;
} /**
* 8位灰度转Bitmap
*
* @param stream
* 输入流
* @param width
* 图像宽度
* @param height
* 图像高度
* @return
*/
public static Bitmap convert8bit(InputStream stream, int width, int height)
{
return convert8bit(readByteArrayFormStream(stream), width, height);
} /**
* 24位灰度转Bitmap
*
* @param data
* 输入流
* @param width
* 图像宽度
* @param height
* 图像高度
* @return
*/
public static Bitmap convert24bit(InputStream stream, int width, int height)
{
return convert24bit(readByteArrayFormStream(stream), width, height);
}
}

显示时宽度和高度必须匹配正确。

ImageView1.setImageBitmap(RawToBitMap.convert8bit(getAssets().open("8bit.raw"), 512, 512));

Android raw to bmp的更多相关文章

  1. android raw与assets区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...

  2. android raw与assets资源

    *res/raw和assets的同样点: 1.两者文件夹下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1.res/raw中的文件会被映射 ...

  3. [转载] Android raw与assets区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点:1.res/raw中的文件会被映射到R ...

  4. android raw和assets的区别

    *res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制. *res/raw和assets的不同点: 1**.res/raw中的文件会被映 ...

  5. Android图像篇

    Android的渲染分为2D渲染和3D渲染两种,当中2D渲染的引擎为Skia.3D渲染的引擎是OpenGL ES.眼下.Android支持OpenGL ES1.0和OpenGL ES 2.0两种标准. ...

  6. Remote Displayer for Android

    应用截图: 作者:sunrain_hjb      QQ:2157825357                 Email:sunrain_hjb@aliyun.com 版本:1.0.188     ...

  7. LCD如何显示图像

    1.LCD显示主要相关概念 (1)像素(pixel) 整个图像是由一个个的像素组成的,像素就是一个显示点.像素就是组成图像的最基本元素,或者说显示中可以被控制的最小单位,整个图像就是由很多个像素组成的 ...

  8. 减小APK大小

    本篇文章翻译自Reduce APK Size 用户通常不会去下载体积过大的应用程序,特别是当自己的设备连接的是 2G/3G 或者按字节付费的网络.这篇文章描述了如何缩减 APK 的体积大小,以使得更多 ...

  9. CSP 初赛 知识点整理

    BIOS: BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计算机 ...

随机推荐

  1. CSS的未来

    仅供参考 前言 完成<CSS核心技术与实战>这本书,已有一个多月了,而这篇文章原本是打算写在那本书里面的,但本章讲解的内容,毕竟属于CSS未来的范畴,而这一切都还不能够确定下来,所以这一章 ...

  2. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  3. 在SQL2008查找某数据库中的列是否存在某个值

    在SQL2008查找某数据库中的列是否存在某个值 --SQL2008查找某数据库中的列是否存在某个值 create proc spFind_Column_In_DB ( @type int,--类型: ...

  4. ASP.NET Aries 入门开发教程5:自定义列表页工具栏区

    前言: 抓紧时间,继续写教程,因为发现用户期待的内容,都在业务处理那一块. 不得不继续勤劳了. 这节主要介绍工具栏区的玩法. 工具栏的默认介绍: 工具栏默认包括5个按钮,根据不同的权限决定显示: 添加 ...

  5. 我为Net狂 ~ 社交平台系列小集合!

    微信平台: 我为Net狂(dotNetCrazy) 资源贴吧: http://tieba.baidu.com/f?kw=毒逆天 个人博客: http://dunitian.cnblogs.com/ h ...

  6. Go web开发初探

    2017年的第一篇博客,也是第一次写博客,写的不好,请各位见谅. 本人之前一直学习java.java web,最近开始学习Go语言,所以也想了解一下Go语言中web的开发方式以及运行机制. 在< ...

  7. bzoj3208--记忆化搜索

    题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目.    我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...

  8. 文档对象模型DOM通俗讲解

    转自:http://www.jb51.net/article/42671.htm 在开始之前先说一点,DOM是非常容易理解的,但是大家说的太官方,让人很是难于理解,我们就用非常简单的语言翻译一遍.加深 ...

  9. Oracle Standard Error 列表

    今天,我特意从网上找了一些,以及自己平时总结的,关于错误编号和说明,平时我们在写项目的时候,往往是可能会出现下面这些错误,例如:违反唯一约束,无效的会话ID,等等.希望对大家有点帮助!可以看看,如果有 ...

  10. Android快乐贪吃蛇游戏实战项目开发教程-04虚拟方向键(三)三角形按钮效果

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.知识点讲解 当我们点击系统自带的按钮时,按钮的外观会发生变化.上篇博文中我们 ...