文件映射内存图像细化(急) 我通过文件映射内存映射了一个图像文件,现在我需要对该图像进行细化操作,是需要分块处理吧?如何再创建一个缓存区来暂时存放细化后的像素点数据,待整幅图像都处理完成后再将后来的像素点数据复制回原来的图像?还是利用文件映射内存吗?该如何操作? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用什么都随便你吧. 一个图像, 算你100MB了, 加上导入加上处理加上写入, 最多才消耗300MB而已嘛... 能给出明确的代码吗?是用CreateDIBSection吧?有更简便的方法吗?只保存像素点数据时,到时再逐个复制回原图?如果创新DIB,复制时也得逐个读取DIB吧? 谢谢你啊,我想等全部处理完再重新写回原来的图像数据中,因为细化需要分块处理才可以,所以不能直接写入,会出现裂痕之类的东西。我想再映射一个文件以存储细化后的像素数据,那个新映射的文件该如何创建?直接在磁盘上新建文件?映射方法是和你原来说的一样吧,最后得到个指针。还有就是为什么映射1.2G的图像时会出现pbFile为错误的指针呢,我还是搞不清呢?急求帮助 // 创建文件内核对象,其句柄保存于hFile HANDLE hFile = CreateFile(lpszPathName,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING, //注意这里是打开现有的CREATE_ALWAYS新建FILE_FLAG_SEQUENTIAL_SCAN, NULL); 用参数CREATE_ALWAYS替换OPEN_EXISTING,就是新建文件了。至于你说的“为什么映射1.2G的图像时会出现pbFile为错误的指针呢”这个正常情况下,肯定没问题,如果出错,肯定是你的CreateFileMapping和MapViewOfFile出错请搜索这个两个函数的用法,特别提示你申请映射空间的大小,这里可以申请64位的整数来表示的空间,所以函数表示空间大小的时候,用了两个32位整数参数来表示,也就是高位32位和低位32位,合在一起才是总空间大小,所以好好研究下吧,别申请错了。 我看了那几个函数的用法,也逐步调试了,发现在映射1.2G图像时,CreateFile和CreateFileMapping都返回了正确的句柄,而且申请的空间也是足够的,因为低32位就可以表示4G空间了,只是到函数MapViewOfFile时返回错误指针。能加个Q吗,联系方便。我的:472818342 vs2005 VS2010 同时安装可以吗? 关于调试的问题 求索引图像的纹理矩是使用颜色索引还是调色板里的颜色 abcd*e=wxyz,这9个数 由Sql Server 2000 改为 Oracle 10g 引起的问题? 断点续传如何确定待传的文件自上次传输之后有没有改变? 正确找出后定给2000分, &&&&&& 请问: 如何更新datetime picker的显示??? 请进来看问题。 如何运行.net的msdn? 问个算法问题:拆成4个16进制数,如何重新拼接成double数? 内存DC选择两次画笔就失败了 win32如何从内存加载位图?
HANDLE hFile = CreateFile(
lpszPathName,
GENERIC_WRITE|GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING, //注意这里是打开现有的CREATE_ALWAYS新建
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
用参数CREATE_ALWAYS替换OPEN_EXISTING,就是新建文件了。
至于你说的“为什么映射1.2G的图像时会出现pbFile为错误的指针呢”
这个正常情况下,肯定没问题,如果出错,肯定是你的CreateFileMapping和MapViewOfFile出错
请搜索这个两个函数的用法,特别提示你申请映射空间的大小,这里可以申请64位的整数来表示的空间,所以函数表示空间大小的时候,用了两个32位整数参数来表示,也就是高位32位和低位32位,合在一起才是总空间大小,所以好好研究下吧,别申请错了。