GDI+ 通过流方式操作图片文件,避免文件权限冲突
来源:互联网 发布:lr推荐算法 编辑:程序博客网 时间:2024/06/08 02:55
在程序中,很多使用GDI+,很多要操作图片文件的地方。当然我们有Bitmap 类,有Bitmap::FromFile 函数,只需要指定文件路径,后面的一切都那么轻松!
但是,当你载入图片后,你的程序就拿到了此图片文件的权限了,你要再在系统中去操作该图片(如重命名)的时候,则会出现访问受限的警告的!你只能结束你的程序才可以!
我在这里的办法则是把图片文件直接读到内存中去,然后释放文件权限,后面的操作就和文件无关了!此处也还是用到了Bitmap中的另外一个方法 Bitmap::FromStream ,
由于此方法操作起来不是很方便,所以我在之前是很少用它的,但是在这个时候,用它来处理是很理想的。
使用 Bitmap::FromStream 流处理的时候,要用到另外一个东西 HGLOBAL,在这里只提一下,这不是我们的重点(能力也有限,也讲不清楚,只能跳过)。
下面就直接上使用方法吧:
首先建立一个 HGLOBAL 的成员变量
HGLOBALm_hMemBuf; 要保证它的生命周期,注意初始化。
char imgbuf[MAX_SIZE_IMAGE];文件缓冲区
CFile file; 读取文件
try
{
file.Open( cstrHeadPath,CFile::modeRead,NULL );
int iFileSize = file.Read( &imgbuf,sizeof( imgbuf ) - 1);
imgbuf[ iFileSize ] = '\0';
}
catch (CFileException* e)
{
return;
}
file.Close(); 关闭文件,这里就已经释放文件权限了,后面就只是对文件缓冲区内的操作了
m_hMemBuf = GlobalAlloc( GMEM_FIXED,MAX_SIZE_IMAGE );为变量分配内存空间,注意空间大小要足够放下你要的最 大图片,参数为自定的宏,可以按震求来
BYTE* pMem = ( BYTE* )GlobalLock( m_hMemBuf );
memcpy( pMem,imgbuf,MAX_SIZE_HEAD_IMAGE );
IStream* pStream;
CreateStreamOnHGlobal( m_hMemBuf,FALSE,&pStream);
Bitmap* pBitmap = Bitmap::FromStream( pStream );
GlobalUnlock( m_hMemBuf );
使用方法就是这些 ,一些函数方法不清楚的还是要查MSDN等相关资料,不作细述。
能力水平有限,这也只当作自己的记录,以便以后用的着,能帮到有需要的人更好。
所以有高手指点出来存在的问题更好,共同学习进步!
- GDI+ 通过流方式操作图片文件,避免文件权限冲突
- 关于文件的上锁和解锁操作。避免冲突
- 使用GDI+缩放图片文件
- 使用GDI+缩放图片文件
- 用gdi+缩放图片文件
- Java文件读写操作指定编码方式 -- 避免乱码
- Java文件读写操作指定编码方式 -- 避免乱码
- Java文件读写操作指定编码方式 -- 避免乱码
- 通过文件流复制图片
- 通过文件流复制图片
- 关于file文件,通过file文件对图片进行操作
- 通过IIS操作修改服务器文件没有权限的解决办法
- 文件管理--文件权限操作
- 以程序的方式操作NTFS的文件权限
- ubuntu文件权限操作
- 文件权限操作
- Linux-文件权限操作
- Linux 文件操作权限
- iPhone OS编程指南(三)
- spring dao到实体的映射
- textarea 字数统计
- python 单元测试 使用摘要
- Vim配置文件(全平台可用)2012-05-01版
- GDI+ 通过流方式操作图片文件,避免文件权限冲突
- 四种求最大子序列和问题的解
- 真机测试及布署Code Sign error问题总结
- Android: Performing Network Operations (网络操作)
- TextWatcher编辑框监听器
- jsTree插件简介(六)
- qt+vs2008
- 百度之星资格赛——B题
- GDB 结合Core File巧妙分析Crash原因