首页 | 公司简介 | 数据恢复 | 备份服务 | 成功案例 | 技术中心 | 客户服务 | 服务报价 | 数据恢复软件 | 联系我们 | 北亚博客  
 
  北京总部: 4006-505-646
  天 津 部: 4006-505-646
  上 海 部: 4006-505-646
  深 圳 部: 4006-505-646
  广 州 部: 4006-505-646
  重 庆 部: 4006-505-646
  南 京 部: 4006-505-646
  其它地区: 4006-505-646
北亚数据恢复软件Windows专业版
三星手机数据恢复软件V1.0
北亚苹果手机数据恢复软件V2.0
北亚硬盘录像机数据恢复软件 V
北亚vmware虚拟机数据恢复软件
北亚照片数据恢复软件
北亚摄像机数据恢复软件 v2.1
北亚Sybase数据库修复软件 V2.
raid磁盘阵列应急方案
HP EVA4400/6400/8400/P6000
iphone 通讯录丢失如何恢复?
xen server 存储库(sr)损坏后
RAID6结构原理详解(北亚数据
AIX下删除LV后的现场保护和数
RAID损坏后 对数据的完整备份
您当前的位置:首页 >> 技术中心 >> 文件修复文栏 >> 正文

RTF文件结构分析及其应用

  void WmfToBmp(int width,int height,char *metafile)

  {

  //width为图片宽度,height为图片高度,*metafile为元文件名

  static HMETAFILE hmf;

  char num[4];

  FILE *fh;

  HDC hMemDC;

  HBITMAP hbmp,hold;

  BITMAPFILEHEADER hdr;

  LPBITMAPINFOHEADER lpbmpih;

  HGLOBAL hg;

  

  BitmapCount++;

  if(BitmapCount==3)

  {

  width=128;

  height=132;

  }

  if(BitmapCount==1)

  {

  width=80;

  height=50;

  }

  ToString10(BitmapCount,num);

  //把字符串转换成数字的函数

  lstrcpy(bmpFile,FilePath);

  lstrcat(bmpFile,num);

  lstrcpy(gifFile,bmpFile);

  lstrcat(bmpFile,".bmp");

  lstrcat(gifFile,".gif");

  hmf=GetMetaFile(metafile);

  hDisplayDC=CreateDC("DISPLAY",NULL,NULL,NULL);

  hMemDC=CreateCompatibleDC(hDisplayDC);

  hg=GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER));

  lpbmpih=(LPBITMAPINFOHEADER)GlobalLock(hg);

  lpbmpih->biSize=sizeof(BITMAPINFOHEADER);

  lpbmpih->biWidth=width;

  lpbmpih->biHeight=height;

  lpbmpih->biPlanes=1;

  lpbmpih->biBitCount=8;

  lpbmpih->biCompression=0;

  hbmp=CreateCompatibleBitmap(hDisplayDC,width,height);

  GlobalUnlock(hg);

  GlobalFree(hg);

  hold=SelectObject(hMemDC,hbmp);

  SetMapMode(hMemDC,MM_ANISOTROPIC);

  SetWindowOrgEx(hMemDC,0,0,NULL);

  SetViewportExtEx(hMemDC,width,height,NULL);

  PlayMetaFile(hMemDC,hmf);

  hbmp=SelectObject(hMemDC,hold);

  if((fh=fopen(bmpFile,"w+b"))==NULL)

  {

  return;

  }

  hdr.bfType=0x4d42;

  hdr.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD)+width*height;

  hdr.bfReserved1=0;

  hdr.bfReserved2=0;

  hdr.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD);

  fwrite((LPSTR)&hdr,sizeof(BITMAPFILEHEADER),1,fh);

  hg=GlobalAlloc(GHND,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD));

  lpbmpih=(LPBITMAPINFOHEADER)GlobalLock(hg);

  lpbmpih->biSize=sizeof(BITMAPINFOHEADER);

  lpbmpih->biWidth=width;

  lpbmpih->biHeight=height;

  lpbmpih->biPlanes=1;

  lpbmpih->biBitCount=8;

  lpbmpih->biCompression=0;

  lpbmpih->biSizeImage=width*height;

  lpbmpih->biClrUsed=256;

  lpbmpih->biClrImportant=0;

  j=GetDIBits(hMemDC,hbmp,0,height,NULL,(BITMAPINFO*)lpbmpih,DIB_RGB_COLORS);

  lpbmpih->biSize=sizeof(BITMAPINFOHEADER);

  fwrite(lpbmpih,sizeof(BITMAPINFOHEADER)+256*sizeof(RGBQUAD),1,fh);

  GetDIBits(hMemDC,hbmp,0,height,(LPSTR)FileBuffer,(BITMAPINFO*)lpbmpih,DIB_RGB_COLS);

  fwrite(FileBuffer,width*height,1,fh);

  GlobalUnlock(hg);

  GlobalFree(hg);

  fclose(fh);

  DeleteDC(hMemDC);

  DeleteDC(hDisplayDC);

  DeleteObject(hbmp);

  DeleteObject(hold);

  DeleteMetaFile(hmf);

  }//end function WmfToBmp()

  用这种方法还有一个好处,那就是当你从最底层开始开发RTF阅读器时,只需把PlayMetaFile的参数从内存DC换成屏幕DC就可以显示图片了。

本新闻共3页,当前在第2页  1  2  3  

上一篇:硬盘起死回生记:Ghost误操作之后(diskgen使用实例)
下一篇:Linux文件系统
返回首页 | 联系我们 | 关于我们 | 招聘信息 | 友情链接 | 网站地图 | 合作伙伴
版权所有 北京北亚宸星科技有限公司
全国统一客服热线:4006-505-646
北京总部:北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
京ICP备09039053

BD