如何将多幅bmp图像依次存入内存,然后再依次显示出来

andyboliu 2011-03-12 05:57:26
我开始时使用attach("路径%d")按路径名称的循环(CDoc中的函数)完成加载,然后处理,显示(CImg.draw(pDC)函数)。但延迟很严重。
现在考虑如何将多幅bmp图像(路径已知,图像大小已知,8bit bmp图,并且不超过10幅)依次存入内存,然后依次在VIew菜单里显示出来(使用CImg.draw(pDC),不建立对话框),这样延迟应该会很小了。
对于如何存储及显示,请高手指教详细点的代码,先谢过了。
...全文
329 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyboliu 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tandyt 的回复:]
引用 13 楼 andyboliu 的回复:
在论坛上逛逛才发现,原来我和各位高手的差距原来这么大啊-。-....
TandyT,邮箱已经发给你了,把代码发给俺学习学习哈,拜谢!~~~


其实这个没什么的,就是弄个列表来存储而已,最好的方法还是一次性读取到内存中,然后再操作!
避免多次对文件进行读取。

我已经发过去了!请查收!
[/Quote]


收到,谢谢!
顺便说一句,同时出你头像上的四大神器,看不出你用的哪个hero 哈哈
无水先生 2011-03-14
  • 打赏
  • 举报
回复
改错:
....注意以上蓝字的宏体必须存在,不能忽略
无水先生 2011-03-14
  • 打赏
  • 举报
回复
xxx.h

class BMPIO: public CObject
{
DECLARE_SERIAL(BMPIO)
}; //存单辐图像那些事情,public CObject必须,否则下面通不过
xxx.cpp
IMPLEMENT_SERIAL( BMPIO, CObject, 1 )

CTypedPtrArray < CObArray, BMPIO* > m_DataArray;

BMPIO * tmp = new BMPIO ;
m_DataArray.add(tmp);

....注意以上红的必须存在,不能忽略
向立天 2011-03-14
  • 打赏
  • 举报
回复
我说的数组是CImg数组
你读一个图片就是一个CImg
你读十个图片就是CImg[10]
至于你怎么处理每一副图片和这个有关系么
TandyT 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 andyboliu 的回复:]
在论坛上逛逛才发现,原来我和各位高手的差距原来这么大啊-。-....
TandyT,邮箱已经发给你了,把代码发给俺学习学习哈,拜谢!~~~
[/Quote]

其实这个没什么的,就是弄个列表来存储而已,最好的方法还是一次性读取到内存中,然后再操作!
避免多次对文件进行读取。

我已经发过去了!请查收!
TandyT 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 andyboliu 的回复:]
引用楼主 andyboliu 的回复:
对于方法一,我没有设置时间间隔时,for(第一幅,最后一幅,++){按路径加载,处理,显示}都延迟很严重(没有加处理算法时显示很快的),字符串List和用for循环加载应该一样吧?(我是VC++新手)。至于第二种方法和我想的一样,只是能给相对详细点的关键代码不?(比如如何写入内存,使用哪些API显示)谢谢

[/Quote]

这个延迟,没办法,是由于你的算法造成的而不是读取文件时造成的。你也知道,不用你的算法时很快的啊。

第二种方法,我以前做个一个,就是定时显示某个目录下N张bmp图片中的n个的小程序。也就是,比如,某个目录下有200幅图像,我在定时器里定时显示其中的50幅图像,这50幅图像是随机抽取的。
不知道这个是否符合你的要求。不过是用MFC来实现的,如果对你有用,我可以发给你参考下。
andyboliu 2011-03-14
  • 打赏
  • 举报
回复
在论坛上逛逛才发现,原来我和各位高手的差距原来这么大啊-。-....
TandyT,邮箱已经发给你了,把代码发给俺学习学习哈,拜谢!~~~
stock999 2011-03-13
  • 打赏
  • 举报
回复
方法二可以使用动态数组啊,new一个数组不就OK了?
andyboliu 2011-03-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tandyt 的回复:]
引用楼主 andyboliu 的回复:
我开始时使用attach("路径%d")按路径名称的循环(CDoc中的函数)完成加载,然后处理,显示(CImg.draw(pDC)函数)。但延迟很严重。
现在考虑如何将多幅bmp图像(路径已知,图像大小已知,8bit bmp图,并且不超过10幅)依次存入内存,然后依次在VIew菜单里显示出来(使用CImg.draw(pDC),不建立对话框),这样延迟应该……
[/Quote]
对于方法一,我没有设置时间间隔时,for(第一幅,最后一幅,++){按路径加载,处理,显示}都延迟很严重(没有加处理算法时显示很快的),字符串List和用for循环加载应该一样吧?(我是VC++新手)。至于第二种方法和我想的一样,只是能给相对详细点的关键代码不?(比如如何写入内存,使用哪些API显示)谢谢

二楼高手说的用一个数组的话,我处理算法中的很多地方要用到图像边界范围循环,而且有多种变化,所以改起来会很麻烦。

三楼说的多线程,我更是没有使用过,所以还是请高手指点指点简单点的,一次性读入内存,然后顺序显示的方法吧
andyboliu 2011-03-13
  • 打赏
  • 举报
回复
还是没有高手给些具体的代码么?跪求解决方案的代码,核心语句也可以啊...
crjwlaq 2011-03-13
  • 打赏
  • 举报
回复
把你要显示的图片的路径保存在内存中,要显示某个图片的时候,加载到内存中显示就可以。
TandyT 2011-03-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 andyboliu 的回复:]
我开始时使用attach("路径%d")按路径名称的循环(CDoc中的函数)完成加载,然后处理,显示(CImg.draw(pDC)函数)。但延迟很严重。
现在考虑如何将多幅bmp图像(路径已知,图像大小已知,8bit bmp图,并且不超过10幅)依次存入内存,然后依次在VIew菜单里显示出来(使用CImg.draw(pDC),不建立对话框),这样延迟应该会很小了。
对于如何存储及显示,请高手指……
[/Quote]

这还不容易?、
方法1:用一个字符串List 来存储你所有需要读取来显示的那些bmp文件完整路径名,然后,在定时器那里,根据你的时间间隔来从这个字符串List里的路径读取进内存再显示。

方法2:在程序运行后,先一次性,把所有bmp位图文件的数据都读取到一个内存数组中存储,可以用

BYTE pImg[width*height*n] 来存储,其中width、height分别是8位bmp的宽和高,n是你总共需要处理的bmp文件数。当然,这个数组只能存储8位bmp位图的像素数据,
至于位图文件头和位图信息头以及位图的颜色索引表,你需要另外存储,因为都是一样的8位bmp图片,这3部分只要存储一次就可以了。
xiuxianshen 2011-03-12
  • 打赏
  • 举报
回复
可以多开线程试试
向立天 2011-03-12
  • 打赏
  • 举报
回复
你原来是一幅一幅处理的
现在用一个数组统一处理不就行了
lovev8 2011-03-12
  • 打赏
  • 举报
回复
不知道你说的延迟是那个延迟,是窗口出现慢、图片加载慢还是图片显示慢。不过如果图像大那你只有用线程加载图像会好点。
多媒体计算机技术19春在线作业1-0003 电视或网页中的多媒体广告比普通报刊上广告的最大优势表现在()。 A:多感官刺激 B:超时空传递 C:覆盖范围广 D:实时性好 答案:A 以下可用于多媒体作品集成的软件是()。 A:PowerPoint B:Windows Media Player C:AcdSee D:AfterEffect 答案:A 图像序列中的两幅相邻图像,后一幅图像与前一幅图像之间有较大的相关,这是()。 A:空间冗余 B:时间冗余 C:信息熵冗余 D:视觉冗余 答案:B 看图软件是 () 。 A:Photoship B:ACDSee 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第1页。C:HyperSnap-DX 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第1页。 D:WinZip 答案:B 扫描图像时,输入分辨率常用##PI来表示,它是指 ()。 A:每英寸的点数 B:颜色数 C:每英寸的像素数 D:每厘米的点数 答案:A Authorwre能导入的视频文件格式为:() A:MPEG和MOV B:RM和VI C:MPG和VI D:MOV和VI 答案:C 下列软件中,属于视频编辑软件的有()   (1)Movie Mker (2) Ulead Videostudio (3)##o##e Premiere (4)Photoshop A:仅(1) B:(1) (3) C:(1) (2) (3) D:全部 答案:C 多媒体数据具有()特点。 A:数据量大和数据类型多。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第2页。B:数据类型问区别大和数据类型少。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第2页。 C:数据量大、数据类型多、数据类型问区别小、输入和输出不复杂。 D:.数据量大、数据类型多、数据类型问区别大、输入和输出复杂 答案:D 下面 () 不是播入CD片上影视节目的必须设备 A:软驱 B:音频卡 C:视频卡 D:CD-ROM 答案:A 允许用户一次性写入数据,但写入后的状态不能再作修改的是() A:磁光盘 B:硬盘 C:CD-R D:CD-ROM 答案:C 目前多媒体计算机中对动态图像数据压缩常采用 () 。 A:JPEG B:GIF C:MPEG D:BMP 答案:C 林琳同学要制作一个动画,将文字变换为图形,他应该在帧面板中选择() A:运动(motion) 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第3页。B:形状(Shpe) 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第3页。 C:遮罩(Msk) D:逐帧动画 答案:B 多媒体技术能够综合处理下列哪些信息() 龙卷风.mp3 荷塘月色.##o## 发黄的旧照片 泡泡堂.exe 一卷胶卷 A: B: C: D: 答案:B 要将录音磁带上的模拟信号节目存入计算机,一般要使用计算机中的()设备。 A:声卡 B:网卡 C:显卡 D:光驱 答案:A ()是决定多媒体作品视觉效果的关键因素? A:文字 B:图像 C:声音 D:动画 E:、视频 答案:B 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第4页。在音频数字化的过程中,对模拟语音信号处理的步骤依次为()。 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第4页。 A:抽样、量化、编码 B:量化、抽样、编码 C:抽样、编码、量化 D:编码、量化、抽样 答案:A 在进行素材采集时,要获得图形图像,下面哪种方法获得的图片不是位图图像() A:使用数码相机拍得的照片 B:用绘图软件绘制图形图像 C:使用扫描仪扫描杂志上的照片 D:从网络中获得的剪贴画(wmf)文件 答案:D 创作一个多媒体作品的第一步是() A:需求分析 B:修改调试 C:作品发布 D:脚本编写 答案:A 超文本技术提供了另一种对多媒体对象的管理形式,它是一种 ()的信息组织形式。      A A:非线性 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第5页。B:抽象性 多媒体计算机技术19春在线作业1-0003全文共11页,当前为第5页。 C:线性 D:曲线性 答案:A 用Flash制作一个小球沿弧线运动动画。操作步骤如下,正确的是:() 新建一个"图形元件",用椭圆工具在元件的第1帧处画一个小球 新建一个Flsh文件 从库中把"小球"拖到"图层1"的第1帧,并跟引导线的一端重合 点击"增加运动引导层"按钮,在"图层1"上新建一个引导层 用铅笔工具在引导层上画一条平滑的曲线,延长到第40帧,并锁定 测试并保存 在第40帧处按F6插入关键帧,把小球拖到引导线的另一端,与其重合

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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