不同的图片读取像素可能不同,要根据自己需要的像素进行提取,因此函数 private byte[] addBMP_RGB_888(int[] b,int w, int h)需要更改。注意,调色表可有可无,以下代码中没有调色表。
一般来说bmp图片由14byte 头文件+40byte信息头+1024调色表+像素点组成。

package com.test.bitmap;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class Mainactivity extends Activity {ImageView img;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btn = (Button) findViewById(R.id.sd);img = (ImageView) findViewById(R.id.img1);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubView view = v.getRootView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bitmap = view.getDrawingCache();if (bitmap != null) {// ByteArrayOutputStream bos = new ByteArrayOutputStream();// bitmap.compress(CompressFormat.PNG, 90, bos); 只能转成PNG、JPEG// byte[] data = bos.toByteArray();// img.setImageBitmap(BitmapFactory.decodeByteArray(data, 0,// data.length));int w = bitmap.getWidth(), h = bitmap.getHeight();int[] pixels=new int[w*h];bitmap.getPixels(pixels, 0, w, 0, 0, w, h);// ByteBuffer dst = ByteBuffer.allocate(bitmap.getRowBytes()// * h);// bitmap.copyPixelsToBuffer(dst);// IntBuffer dst=IntBuffer.allocate(w*h);// bitmap.copyPixelsToBuffer(dst);byte[] rgb = addBMP_RGB_888(pixels,w,h);byte[] header = addBMPImageHeader(rgb.length);byte[] infos = addBMPImageInfosHeader(w, h);byte[] buffer = new byte[54 + rgb.length];System.arraycopy(header, 0, buffer, 0, header.length);System.arraycopy(infos, 0, buffer, 14, infos.length);System.arraycopy(rgb, 0, buffer, 54, rgb.length);try {FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+ "/hello.bmp");fos.write(buffer);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}});}//BMP文件头private byte[] addBMPImageHeader(int size) {byte[] buffer = new byte[14];buffer[0] = 0x42;buffer[1] = 0x4D;buffer[2] = (byte) (size >> 0);buffer[3] = (byte) (size >> 8);buffer[4] = (byte) (size >> 16);buffer[5] = (byte) (size >> 24);buffer[6] = 0x00;buffer[7] = 0x00;buffer[8] = 0x00;buffer[9] = 0x00;buffer[10] = 0x36;buffer[11] = 0x00;buffer[12] = 0x00;buffer[13] = 0x00;return buffer;}//BMP文件信息头private byte[] addBMPImageInfosHeader(int w, int h) {byte[] buffer = new byte[40];buffer[0] = 0x28;buffer[1] = 0x00;buffer[2] = 0x00;buffer[3] = 0x00;buffer[4] = (byte) (w >> 0);buffer[5] = (byte) (w >> 8);buffer[6] = (byte) (w >> 16);buffer[7] = (byte) (w >> 24);buffer[8] = (byte) (h >> 0);buffer[9] = (byte) (h >> 8);buffer[10] = (byte) (h >> 16);buffer[11] = (byte) (h >> 24);buffer[12] = 0x01;buffer[13] = 0x00;buffer[14] = 0x18;buffer[15] = 0x00;buffer[16] = 0x00;buffer[17] = 0x00;buffer[18] = 0x00;buffer[19] = 0x00;buffer[20] = 0x00;buffer[21] = 0x00;buffer[22] = 0x00;buffer[23] = 0x00;buffer[24] = (byte) 0xE0;buffer[25] = 0x01;buffer[26] = 0x00;buffer[27] = 0x00;buffer[28] = 0x02;buffer[29] = 0x03;buffer[30] = 0x00;buffer[31] = 0x00;buffer[32] = 0x00;buffer[33] = 0x00;buffer[34] = 0x00;buffer[35] = 0x00;buffer[36] = 0x00;buffer[37] = 0x00;buffer[38] = 0x00;buffer[39] = 0x00;return buffer;}private byte[] addBMP_RGB_888(int[] b,int w, int h) {int len = b.length;System.out.println(b.length);byte[] buffer = new byte[w*h * 3];int offset=0;for (int i = len-1; i>=w; i-=w) {//DIB文件格式最后一行为第一行,每行按从左到右顺序int end=i,start=i-w+1;for(int j=start;j<=end;j++){buffer[offset]=(byte)(b[j]>>0);buffer[offset+1]=(byte)(b[j]>>8);buffer[offset+2]=(byte)(b[j]>>16);offset += 3;}}return buffer;}}

欢迎关注个人公众号“低功耗蓝牙技术研究及推广”

更多相关文章

  1. Android(安卓)JNI操作Bitmap实现黑白图片
  2. Android系统使用global key 一键启动指定APP或者打开WiFi/蓝牙等
  3. getLeft,getTop,getRight,getBottm区别
  4. Android(安卓)Bluetooth 蓝牙基本操作
  5. Xamarin Android基本功能实现
  6. android_lesson_1
  7. android通过蓝牙实现两台手机传输数据
  8. Android磨皮算法的实现 renderScript实现表面模糊
  9. [Android(安卓)Studio]蓝牙通信(Fragment中实现)

随机推荐

  1. 【Android】消息机制应用
  2. Android之基于HTTP协议的通信详解
  3. Android之旅---广播(BroadCast)
  4. [置顶] Android调试工具之adbs
  5. Android:子线程向UI主线程发送消息
  6. Android(安卓)根文件系统启动分析
  7. Android(安卓)屏幕截图 代码
  8. 初体验Android的两个小不爽
  9. 猫猫学iOS之二维码学习,快速生成二维码
  10. Android——智能指针