1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android 二进制流保存为bmp文件

android 二进制流保存为bmp文件

时间:2018-08-21 22:09:27

相关推荐

android 二进制流保存为bmp文件

不同的图片读取像素可能不同,要根据自己需要的像素进行提取,因此函数 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();// press(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;}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。