wbmp图像解码

原创 2004年10月26日 14:08:00

                                                                                                    wbmp图像解码
                                                                                    lmjx  2004/10/26  Email:limiao@yeah.net

WBMP 是无线的图象格式,目前仅支持未压缩的黑白图象。

所有的WBMP 文件在位于实际图象元素之前都有一个"Header" 标头部分,标头部分的第一个八位位组指明了WBMP的型态。因为目前只有型态0(黑白,非压缩) WBMP 格式被定义,第一个8个位组应该为零接下来的就是固定标头部分,也为0

下一个八位位组指出了图象的宽度。宽是指图象的水平尺寸,用多字节整数格式表示,一个多字节整数由一个或多个字节构成。一个多位整数中,每个字节的第0bit告诉我们是否有更多的构成该多位整数的字节跟随在其后面。如果该字节的第0bit 0,意味着其后面没有更多的字节了,如果将字节的第0bit 设为1意味着在着该多字节整数由多个字节构成。接下来是高度,高度是图象的垂直尺寸,同样使用多字节格式表示。剩余部分就是图像数据了,每一个bit对应一个象素,1为白0为黑。

以下是手机上wbmp解码的一个例子:
u8 WBMPDecodeOneByte(u16 *p,u8 oneByte)
{
 u8 i,mask;
 mask = 0x80;
 for(i = 0;i<8;i++){
  if(oneByte&mask)
   *(p+i) = 0xffff;
  else *(p+i) = 0x0000;

  mask >>= 1;
 }
 return 1;
}

u8 WBMPGetWorH(u8 *p,u16 *worh)
{
 u8 ret = 0;
 *worh = 0;
 for(;;){
  if(*p&0x80){
   *worh |= (*p&0x7f);
   ret++;
   p++;
  }else{
   *worh |= (*p);
   ret++;
   break;
  }
 }
 return ret;
 
}

u32 WBMPDecoder( u8 *indata,u8 *outdata)
{
 u16 i,j,width,height;
 u8 bits,inLine;
 u16 *p;
 u8 *cp;

 if(indata[WBMP_TYPE_FIELD_BYTE_NB/*0*/]!=0)return 1;
 if(indata[WBMP_FIXHEADER_FIELD_BYTE_NB/*1*/]!=0)return 2;
 
 cp = indata+2;
 cp +=WBMPGetWorH(cp,&width);
 cp +=WBMPGetWorH(cp,&height);

 if(outdata == 0){
  return (width*height*2+8);
 }

 p = (u16*)outdata+4;

 bits = width%8;
 inLine = width/8;
 if(bits)inLine++;

 for(i = 0,j = 0;i<(width+(8-bits))*height;i+=8,j++){
  if(bits){
   if((j%inLine)==inLine-1){
    WBMPDecodeOneByte(p,cp[j],bits);
    p += bits*2;
   }
   else {
    WBMPDecodeOneByte(p,cp[j],8);
    p += 16;
   }
  }else{
   WBMPDecodeOneByte(p,cp[j],8);
   p += 16;
  }
  
 }

 p = (u16*)outdata;
 
 *(p+0) = width;
 *(p+1) = height;
 *(p+2) = 0x0010;
 *(p+3) = 0x0000;

 return 0;
 
}

JPG,PNG,GIF,WBMP,BMP

一、介绍 通过百度百科普及一下知识 GIF GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文...
  • mengxiangbaidu
  • mengxiangbaidu
  • 2012年10月29日 10:10
  • 2637

WBMP图片格式和转换JPEG方法

Wireless Bitmap(WBMP)是一种移动设备使用的图像格式。这种格式被用于Wireless Application Protocol(WAP)网页中。 本文介绍了WBMP图片的格式,以及...
  • shelldon
  • shelldon
  • 2017年04月27日 00:30
  • 918

iOS图像解码

一、解码方式: 1、CGContextDrawImage方式(CoreGraphics)     它接受一个原始的位图参数 imageRef ,最终返回一个新的解压缩后的位图 newImage ,...
  • bravegogo
  • bravegogo
  • 2017年07月05日 18:40
  • 690

图片解码方法

采用SDWebImage中的实现方法: + (UIImage *)decodedImageWithImage:(UIImage *)image {     if (image.images)...
  • smnisbear
  • smnisbear
  • 2016年04月19日 19:41
  • 337

.wbmp图片的制作

.wbmp图片的制作   wml网页中,图片的限制比在html网页中要多。wml网页中,目前你只能使用1位BMP黑白图。对于你目前的jpg,gif图片格式需要转换为wml支持的wbmp格式。转换图片目...
  • wyaspnet
  • wyaspnet
  • 2009年06月16日 15:29
  • 4599

Android jpg图像解码崩溃

有个特殊格式的从PhotoShop导出的jpg文件,用BitmapFactory.decodeFile解码崩溃,try catch都不行,  用下面这个就ok: BitmapFactory.decod...
  • wuzuyu365
  • wuzuyu365
  • 2017年12月07日 09:48
  • 42

手机开发实战159——WBMP介绍

WBMP格式 Wireless Bitmap(WBMP)是一种移动计算机设备使用的标准图像格式。这种格式特定使用于Wireless Application Protocol(WAP)网页中。WB...
  • xjbclz
  • xjbclz
  • 2016年06月12日 22:02
  • 94

使用libjpeg进行JPEG图像解码

 如题:如何对test.jpg进行解码? 注:这里使用libjpeg库进行图像解码。也可以不使用libjpeg库,但是比较繁琐。 直接上代码: #include "jpeg...
  • lushoumin
  • lushoumin
  • 2017年04月12日 10:58
  • 1594

使用LibJpeg图像解码

1 简介libjpeg一个图片解码库,在项目中需要读入图片,但不想依赖opencv的接口,这时可以libjpeg完成解码。libjpeg有两个版本,一个时原装的libjpeg,另一个则是libjpeg...
  • qyczyr
  • qyczyr
  • 2017年05月12日 15:36
  • 137

嵌入式GUI图像解码模型思考

你懂的,不解释 图片解码模型一: if (memcmp(filename, ".bmp", 4))  type = ID_BMP; else if (memcmp(filename, ".jp...
  • YXFLINUX
  • YXFLINUX
  • 2012年11月14日 15:34
  • 549
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wbmp图像解码
举报原因:
原因补充:

(最多只允许输入30个字)