请高手指教在java中如何保存8位!


    由于功能需求,目前采用JNI技术通过C代码封装了Twain接口,扫描500DPI的图像,目前我以将图象的原始数据(字节数组)获得并且返回到Java程序中,(也许在java还要根据原始数据生成其他图象,因此不能在C里做BMP图形),并且能够得到图像宽、高度,在C里已经对图象的宽度字节进行了处理 N%4==0了,在Java中我根据BMP文件的格式开始定义数据类型如下:
class BItmapFileHeader { //All Filed is 14 byte
private short    bfType;//图片格式必须为‘BM’ 16进制为 0x4D42
private int    bfSize;//图象大小包括头文件以及图象信息
private short    bfReserved1;//保留必须为0
private short    bfReserved2;//保留必须为0
private int    bfOffBits;//从文件头到图象数据的字节数
}
class BitmapInfoHeader {
//All Filed is 40 byte
private int      biSize;//图象信息头占用空间
         private int      biWidth;//图像宽度单位为像素
         private int      biHeight;//图象高度单位为像素
         private short    biPlanes;//为目标设备说明位面数,其值总是被设为1 
        private short    biBitCount;//颜色位数 值为1、4、8、16、24、或32
        private int      biCompression;//说明图像数据压缩的类型 0 为没有压缩
         private int      biSizeImage;//说明图像的大小,以字节为单位。当用压缩类型为0时可设置为0
        private int      biXPelsPerMeter;//说明水平分辨率,用像素/米表示 一般设置为0
        private int      biYPelsPerMeter;//说明水平分辨率,用像素/米表示一般设置为0
        private int      biClrUsed;//说明位图实际使用的彩色表中的颜色索引数,如果设为0,则说明使用所有调色板项
         private int      biClrImportant;//说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要
}
然后我将相关的数据填写好,对于整形、短整形、转字节数组应该没有问题,可是现在我将头文件信息,和图象信息以及图像数据都写进去了,例如:
width:796
height:1050
图像大小为796*1050+14+40= 835854 byte
图像是出来了,可是太模糊了,如果我把这个图像用PS采用原始图像方式打开 宽度为796 高度为1050 头文件为54 显示的非常清晰。
由于我是首次接触图象处理,搞的我晕头转向的,请高手帮忙分析分析,问题解决我加分感谢!