Android上Bitmap文件解析示例

本文提供了一个在Android上解析Bitmap文件并进行灰度处理的示例。内容涉及24位深度的Bitmap图像,讲解了Bitmap的基本结构,包括大端小端存储、图像读取顺序、字节补齐和调色板处理。通过代码示例和工具BMPAnalyzer辅助理解。
摘要由CSDN通过智能技术生成

本文主要介绍的是Bitmap文件解析的一个简单示例,例子是在Androd上写的,用到的图像只有24位深度的这一种。

Bitmap文件的基本结构参考:
http://www.cnblogs.com/jerry-lin300/archive/2011/12/16/2233854.html

例子中用到的原始Bitmap图片:
这里写图片描述

主要过程就是加载Bitmap图片进行解析,简单的灰度处理,转换成Android中Bitmap对象,然后显示出来。

截图:
这里写图片描述

在分析Bitmap结构过程中可以利用 BMPAnalyzer 这个小工具,上面会显示出主要的参数:
这里写图片描述

Bitmap算是最简单的图像格式了,解析也比较简单,有几点注意下就好了:
1.文件信息中各字段是采用大端还是小端存储的;
2.图像内容读取的顺序(biHeight的正负),一般是从左下角开始按行读取;
3.字节补齐的问题,每行4个字节整数倍存储;
4.文件解析的时候考虑有无调色板(颜色表)。

下面是代码:

package com.ysm.bmp;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.util.Log;
import android.widget.ImageView;

public class MainActivity extends Activity {
   

    private ImageView mResultView;

    public int mWidth;
    public int mHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mResultView = (ImageView) findViewById(R.id.result_image);

        new BmpConvertTask().execute();

    }

    private byte[] loadBmpFile() throws IOException {

        InputStream is = getResources().getAssets().open("stone.bmp"); 

        ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
        int ch;
        while ((ch = is.read()) != -1) {
            bytestream.write(ch);
        }
        byte imgdata[] = bytestream.toByteArray();
        bytestream.close();

        return imgdata;
    }

    private int[] bitmapFilter(byte[] fileBytes) {

        /**************** bitmap file head *******************/
        int offset = 0;
        //"BM"
        //int BM = fileBytes[offset+1] & 0xff;
        //BM = (BM << 8) | (fileBytes[offset] & 0xff) ;
        offset 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值