高手们帮我看看我的用java保存位图的程序错在哪里了?

wbel 2004-07-18 09:46:48
class BmpWriter
{
short fileType=0x4dd2;
int fileSize;
short reserved1=0;
short reserved2=0;
int bitmapOffset=54;
int size=40;
int width,height;
short planes=1;
short bitsPerPixel=24;

private int biCompression = 0;
private int biSizeImage = 0x030000;
private int biXPelsPerMeter = 0x0;
private int biYPelsPerMeter = 0x0;
private int biClrUsed = 0;
private int biClrImportant = 0;

public void store(Image img,String filename) throws Exception
{
width=img.getWidth(null);
height=img.getHeight(null);
int[] imgPix=new int[width*height];
try{
PixelGrabber pg=new PixelGrabber(img,0,0,width,height,imgPix,0,width);
pg.grabPixels();

}catch(Exception e){}
FileOutputStream fos=new FileOutputStream(filename);
FileChannel channel=fos.getChannel();
boolean padded=false;
int iScanLineSize=3*width;
if(iScanLineSize%2!=0)
{
iScanLineSize++;
padded=true;
}
fileSize=14+40+iScanLineSize*height;
int sizeOfBitmap=iScanLineSize*height;
ByteBuffer bbuf=ByteBuffer.allocate(fileSize);
bbuf.order(ByteOrder.LITTLE_ENDIAN);
bbuf.clear();
bbuf.putShort(fileType);
bbuf.putInt(fileSize);
bbuf.putShort(reserved1);
bbuf.putShort(reserved2);
bbuf.putInt(bitmapOffset);
bbuf.putInt(biCompression);
bbuf.putInt(biSizeImage);
bbuf.putInt(biXPelsPerMeter);
bbuf.putInt(biYPelsPerMeter);
bbuf.putInt(biClrUsed);
bbuf.putInt(biClrImportant);
for(int i=height-1;i>=0;i--)
{
byte pad=0;
for(int j=0;j<width;j++)
{
int pixel=imgPix[(i*width)+j];
byte alpha=(byte)((pixel>>24)&0xff);
byte red=(byte)((pixel>>16)&0xff);
byte green=(byte)((pixel>>8)&0xff);
byte blue=(byte)((pixel)&0xff);
bbuf.put(blue);
bbuf.put(green);
bbuf.put(red);
}
if(padded)
bbuf.put(pad);
}
bbuf.flip();
channel.write(bbuf);
fos.close();
}
}


用这个类保存位图文件后,图像不能打开
...全文
63 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧