VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 437|回复: 4

[求助] 二进制转BMP图片

[复制链接]
30_avatar_middle
在线会员 wyq00789 发表于 2018-3-28 08:49:50 | 显示全部楼层 |阅读模式
3驿站币
本帖最后由 wyq00789 于 2018-3-28 08:50 编辑

SYC大哥,我又有个问题想求教一下,
已知
   bufstr:= '424D'+  //文件类型
  'FFFF0000'+ //文件大小'
  '0000' +   //保留位 必须为0
  '0000' +  // 保留位 必须为0
  '36000000'+  //从文件头开始到实际图像数据之间的字节的偏移量      10进制54
   // 加载位图信息头  40字节
  '28000000'+  //位图信息大小  10进制40
  '00010000'+   //图像款度
  '80FFFFFF'+   //图像高度
  '0100'+      //目标设备说明位面数,值总为1
  '2000'+     //像素 1、4、8、16、24、32 一般为24 活 32
  '00000000'+  //说明图像数据压缩的类型
  '00000000'+  //说明图像大小  当BI_RGB格式时,可设置为0
  '00000000'+  //水平分辨率
  '00000000'+  //迟滞分辨率
  '00000000'+  //调色板 为0说明使用所有调色板
  '00000000' +;   //说明图像显示有重要影响的索引,如果0表示都重要
‘0000000000000000000000000000000000000000000000...........‘; //图片数据

怎么把这段数据转换成BMP图片?二进制转BMP图片 二进制转BMP图片  二进制转BMP图片  二进制转BMP图片  二进制转BMP图片





上一篇:C++ DLL 中 返回值是结构体指针函数的使用
下一篇:char*指针

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-3-28 09:44:06 | 显示全部楼层
你这个只能是按照BMP的文件格式,把相应的内存里面的各个段的数据填充到BMP的格式中去,之后就自动变成BMP图片了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

81_avatar_middle
online_moderator Debug 发表于 2018-3-28 09:57:33 | 显示全部楼层
楼主可以参考下这篇文章:https://www.cnblogs.com/Matrix_Y ... /12/02/1615295.html

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

30_avatar_middle
ico_lz  楼主| wyq00789 发表于 2018-3-28 11:19:58 | 显示全部楼层
感谢大神帮忙 使用函数解决了,以下是功能函数
  1. bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height, int biBitCount, RGBQUAD *pColorTable)
  2. {

  3.          //如果位图数据指针为0,则没有数据传入,函数返回

  4.          if (!imgBuf)
  5.                  return 0;

  6.          //颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0

  7.          int colorTablesize = 0;

  8.          if (biBitCount == 8)
  9.                  colorTablesize = 1024;

  10.          //待存储图像数据每行字节数为4的倍数

  11.          int lineByte = (width * biBitCount / 8 + 3) / 4 * 4;

  12.          //以二进制写的方式打开文件

  13.          FILE *fp = fopen(bmpName, "wb");

  14.          if (fp == 0)
  15.                  return 0;

  16.          //申请位图文件头结构变量,填写文件头信息

  17.          BITMAPFILEHEADER fileHead;

  18.          fileHead.bfType = 0x4D42;//bmp类型

  19.                                                           //bfSize是图像文件4个组成部分之和

  20.          fileHead.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + colorTablesize + lineByte*height;

  21.          fileHead.bfReserved1 = 0;

  22.          fileHead.bfReserved2 = 0;

  23.          //bfOffBits是图像文件前3个部分所需空间之和

  24.          fileHead.bfOffBits = 54 + colorTablesize;

  25.          //写文件头进文件

  26.          fwrite(&fileHead, sizeof(BITMAPFILEHEADER), 1, fp);

  27.          //申请位图信息头结构变量,填写信息头信息

  28.          BITMAPINFOHEADER head;

  29.          head.biBitCount = biBitCount;

  30.          head.biClrImportant = 0;

  31.          head.biClrUsed = 0;

  32.          head.biCompression = 0;

  33.          head.biHeight = height;

  34.          head.biPlanes = 1;

  35.          head.biSize = 40;

  36.          head.biSizeImage = lineByte*height;

  37.          head.biWidth = width;

  38.          head.biXPelsPerMeter = 0;

  39.          head.biYPelsPerMeter = 0;

  40.          //写位图信息头进内存

  41.          fwrite(&head, sizeof(BITMAPINFOHEADER), 1, fp);

  42.          //如果灰度图像,有颜色表,写入文件

  43.          if (biBitCount == 8)
  44.                  fwrite(pColorTable, sizeof(RGBQUAD), 256, fp);

  45.          //写位图数据进文件

  46.          fwrite(imgBuf, height*lineByte, 1, fp);

  47.          //关闭文件

  48.          fclose(fp);

  49.          return 1;

  50. }
复制代码

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

81_avatar_middle
online_moderator Debug 发表于 2018-3-28 11:57:28 | 显示全部楼层
wyq00789 发表于 2018-3-28 11:19
感谢大神帮忙 使用函数解决了,以下是功能函数

不错,这个函数我也收藏一下,以后用的上!二进制转BMP图片

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-8-17 05:48

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表