社区
C语言
帖子详情
怎样取得BMP图像的数据区指针
hela329512384
2010-08-12 07:05:30
我用的是简单的C编程,可是碰到了个难题,不知道怎么样得到BMP图像的数据区指针,请问哪位哪些能否指教下,谢谢了
...全文
448
13
打赏
收藏
怎样取得BMP图像的数据区指针
我用的是简单的C编程,可是碰到了个难题,不知道怎么样得到BMP图像的数据区指针,请问哪位哪些能否指教下,谢谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunrier
2010-08-23
打赏
举报
回复
了 解
mikithebest
2010-08-15
打赏
举报
回复
首先8bit、24bit、32bit以及不同大小的bmp图像的文件头大小是不同的。具体可以google下。
如果你的是嵌入式系统的话,可能不能一次性开辟那么多内存,可以通过fseek和fread来读取指定位置和大小的数据,就可以了。明白我的意思吧?
xiongmingvvv
2010-08-15
打赏
举报
回复
二楼已经说得十分清楚了,函数调用都给你了。自己仔细看
[Quote=引用 10 楼 hela329512384 的回复:]
谢谢各位,是都说的很对,我知道可以利用文件指针。不过我是想通过这种*(p+(height-1)*j+i)这种方式来得到图像的数据,p是指向图像数据的指针。我现在的做法是把文件里的数据赋值到数组,然后对数组操作,再把数组里的值写到文件里去,以改变图像,但是开辟的数组容量太大,而且由于我想要的操作图像的原因,还要几个这样大小的数组,所以资源占用太多,所以想要那个p,就不需要那么多数组了。希望哪位大侠能……
[/Quote]
hela329512384
2010-08-14
打赏
举报
回复
谢谢各位,是都说的很对,我知道可以利用文件指针。不过我是想通过这种*(p+(height-1)*j+i)这种方式来得到图像的数据,p是指向图像数据的指针。我现在的做法是把文件里的数据赋值到数组,然后对数组操作,再把数组里的值写到文件里去,以改变图像,但是开辟的数组容量太大,而且由于我想要的操作图像的原因,还要几个这样大小的数组,所以资源占用太多,所以想要那个p,就不需要那么多数组了。希望哪位大侠能够明白我的意思~
hastings
2010-08-13
打赏
举报
回复
说得太绝对了~~
要自己搞偏移量之类的,你得彻底了解位图格式。
BITMAPINFOHEADER类型的:
8位位图,其颜色表不一定是256个。
4位位图,其颜色表不一定是16个。
16位和32位位图,其信息头后面可能还会有3个DWORD大小的屏蔽码~~
fire_woods
2010-08-13
打赏
举报
回复
14+40+4*调色板元素格式
256色的BMP是14+40+256*4=1078
kevin07042034
2010-08-13
打赏
举报
回复
[Quote=引用 3 楼 dingshaofengbinbin 的回复:]
BMP文件头包括两个结构体:BITMAPFILEHEADER和(BITMAPINFOHEADER或BITMAPINFO),这两个结构体的大小分别是14和(40或44)字节,所以总共是54或58字节,不是1078字节吧??你先试一下,看看准确不(应该没有错的)。
[/Quote]
256色的BMP是1078,其他的在头文件里面都有偏移说明的,我没说清楚...
鱼塘鱼汤
2010-08-13
打赏
举报
回复
BMP的头有54位,你直接fseek过去就行了
jackyjkchen
2010-08-13
打赏
举报
回复
[Quote=引用 4 楼 hela329512384 的回复:]
你们说的这些我知道,但是我想要的是指向数据的指针,毕竟你们说的指针还是文件指针,是文件类型的指针,比如我是24位图,读数据虽然读了可以用frwite(&a[i][j],1,1,fp)fp是文件指针,但是当我只要把24位按8为读出来时,按道理读3次,我的那条指令是读了8位,可是fp读了一次后指向了下一个像素了,而不是这个像素里的第二个8位。所以我想要指向该数据的指针~文件指针这里碰到了麻烦
[/Quote]
不明白你说的,缓冲区的指针不就是“指向数据的指针”么
hela329512384
2010-08-13
打赏
举报
回复
你们说的这些我知道,但是我想要的是指向数据的指针,毕竟你们说的指针还是文件指针,是文件类型的指针,比如我是24位图,读数据虽然读了可以用frwite(&a[i][j],1,1,fp)fp是文件指针,但是当我只要把24位按8为读出来时,按道理读3次,我的那条指令是读了8位,可是fp读了一次后指向了下一个像素了,而不是这个像素里的第二个8位。所以我想要指向该数据的指针~文件指针这里碰到了麻烦
dingshaofengbinbin
2010-08-13
打赏
举报
回复
BMP文件头包括两个结构体:BITMAPFILEHEADER和(BITMAPINFOHEADER或BITMAPINFO),这两个结构体的大小分别是14和(40或44)字节,所以总共是54或58字节,不是1078字节吧??你先试一下,看看准确不(应该没有错的)。
kevin07042034
2010-08-13
打赏
举报
回复
unsigned char *bmpbuff = NULL;
FILE *bmpfp;
bmpbuff = (unsigned char *)malloc(sizeof(char)*WIDTH*LINE );//WIDTH * LINE 是数据区的字符数
if(bmpbuff == NULL)
exit (1);
bmpfp = fopen("picture.bmp","rb");
fseek(bmpfp, 1078, 0);//BMP文件前1078个字节是头文件
fread(bmpbuff, sizeof(char), WIDTH * LINE, bmpfp);
这样bmpbuff里面就是你所需要的东西了
jackyjkchen
2010-08-12
打赏
举报
回复
打开文件,偏移N个字节越过BMP文件头(多少我忘了,去看bmp格式去)
把剩下的读出来,就是图像区
DICOM TO
BMP
使用的OPENCV_
bmp
保存函数
下载后可以直接使用,没有使用系统路径添加OPENCV的头和库文件,所以不需要配置! 其实就是将从DICOM所获得的
图像
数据
赋值给OPENCV中指向
图像
数据
的
指针
。 测试过DICOM的超声
图像
。可以正常转换!
易语言
图像
跟踪算法
易语言
图像
跟踪算法源码,
图像
跟踪算法,显示程序,画板画框,playBoy,playDavid,playGame,readBox,开始捕获摄像头,释放摄像头,获取一帧图片,获取
图像
宽度字节数,获取
图像
宽度,获取
图像
高度,编码到
Bmp
,获取
图像
数据
指针
,获取
图像
通道数,释放
Bmp
图像
内存,创建跟踪
FFmpeg4.3系列之31:庖丁解牛之
图像
格式与压缩原理及实战
FFmpeg系列之31FFmpeg第2季编解码专题之1:庖丁解牛之
图像
格式与压缩原理及实战----------------------------------------我将带领大家一起来学习:
bmp
/png/jpg/gif格式解析与lib
bmp
/libpng/jpeglib/giflib开源库实战;具体内容包括:庖丁解牛之
bmp
格式与压缩原理及实战、庖丁解牛之png格式与压缩原理及实战、庖丁解牛之jpg格式与压缩原理及实战、庖丁解牛之mjpeg格式与压缩原理及实战、庖丁解牛之gif格式与压缩原理及实战。 目前FFmpeg第二季【编解码专题】,主要包括以下课程:FFmpeg4.3系列之31:
图像
格式与压缩FFmpeg4.3系列之32:MPEG-1/2视频编解码FFmpeg4.3系列之33:H.264/H.265视频编码FFmpeg4.3系列之34:FFmpeg+DXVA2+D3D硬件加速FFmpeg4.3系列之35:FFmpeg+CUDA硬件加速
(VC++)API编程读
bmp
图片
读取
bmp
图片的源程序,API编程,含需要的头文件 #include "windows.h" #include "StdAfx.h" #include
#include
//定义一些变量 unsigned char *p
Bmp
Buf; //读入
图像
数据
的
指针
int
bmp
Width; //
图像
的宽 int
bmp
Height; //
图像
的高 RGBQUAD *pColorTable; //颜色表
指针
unsigned int biBitCount; //
图像
类型,每像素位数 bool read
Bmp
(char *
bmp
Name) { //二进制读方式打开指定的
图像
文件 FILE *fp = fopen(
bmp
Name, "rb"); if(fp == 0) return 0; //跳过位图文件头结构BITMAPFILEHEADER fseek(fp,sizeof(BITMAPFILEHEADER),0); //fseek(fp,14,0); //定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中 BITMAPINFOHEADER head; fread(&head, sizeof(BITMAPINFOHEADER),1,fp); //获取
图像
宽,高,每像素所占位数等信息
bmp
Width = head.biWidth;
bmp
Height = head.biHeight; biBitCount = head.biBitCount; //定义变量,计算
图像
每行所占的字节数(必须是4的倍数)
InkyConverter:pimoroni Inky pHAT电子纸显示屏的
图像
转换工具
InkyConverter 描述 InkyConverter是用于的
图像
转换工具。 它会生成8位PNG格式的212 x 104像素的黑白和红色(bwr)位图
数据
,并带有特殊的调色板
数据
(调色板0 =白色,调色板1 =黑色,调色板2 =红色)。 JPG或PNG或
BMP
文件可用作输入。
图像
将转换为黑白位图。(感谢 。)
图像
中的红色斑点被分别提取和处理,并与黑白位图组合。 指示 单击“打开文件...”按钮或单击空格键以打开
图像
文件。
图像
显示在窗口中。 将鼠标
指针
移到
图像
上。 您将在鼠标
指针
周围看到一个“焦点
区
域”。 您可以通过拖动或点击箭头键来滚动源
图像
。 焦点
区
域下的
图像
会自动转换为bwr-image,并且焦点
区
域的副本始终会在窗口的右上角
区
域显示为捕获预览。 将焦点
区
域定位到要捕获
图像
的位置,然后单击鼠标左键或按Enter键。 聚焦
区
域下的
图像
被捕获并显示在窗口的右下角。
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章