转换一个JPG/GIF格式的图片到BITMAP位图格式.
2006-08-28 11:08
591 查看
说明:在这里写个函数反回一个位图句柄,用法类似于LoadImage函数,指定一个图片的路径就行了.
注意:用完后记得释放.
HANDLE LoadAnImage(LPCTSTR FileName)
{
// Use IPicture stuff to use JPG / GIF files
IPicture* p;
IStream* s;
HGLOBAL hG;
void* pp;
FILE* fp;
if (FileName == NULL || _tcscmp(FileName, "") == 0)
return NULL;
// Read file in memory
fp = fopen(FileName,"rb");
if (!fp)
return NULL;
fseek(fp,0,SEEK_END);
int fs = ftell(fp);
fseek(fp,0,SEEK_SET);
hG = GlobalAlloc(GPTR,fs);
if (!hG)
{
fclose(fp);
return NULL;
}
pp = GlobalLock( hG );
fread(pp,1,fs,fp);
fclose(fp);
GlobalUnlock( hG );
// Create an IStream so IPicture can
CreateStreamOnHGlobal(hG,false,&s);
if (!s)
{
GlobalFree(hG);
return NULL;
}
OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);
if (!p)
{
s->Release();
GlobalFree(hG);
return NULL;
}
s->Release();
GlobalFree(hG);
HANDLE hB = 0;
p->get_Handle((UINT *)&hB);
// Copy the image. Necessary, because upon p's release,
// the handle is destroyed.
HANDLE hBB = CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG);
p->Release();
// TRACE2("/nFILE: %s, HANDLE: 0x%x/n", FileName, hBB);
return hBB;
}
注意:用完后记得释放.
HANDLE LoadAnImage(LPCTSTR FileName)
{
// Use IPicture stuff to use JPG / GIF files
IPicture* p;
IStream* s;
HGLOBAL hG;
void* pp;
FILE* fp;
if (FileName == NULL || _tcscmp(FileName, "") == 0)
return NULL;
// Read file in memory
fp = fopen(FileName,"rb");
if (!fp)
return NULL;
fseek(fp,0,SEEK_END);
int fs = ftell(fp);
fseek(fp,0,SEEK_SET);
hG = GlobalAlloc(GPTR,fs);
if (!hG)
{
fclose(fp);
return NULL;
}
pp = GlobalLock( hG );
fread(pp,1,fs,fp);
fclose(fp);
GlobalUnlock( hG );
// Create an IStream so IPicture can
CreateStreamOnHGlobal(hG,false,&s);
if (!s)
{
GlobalFree(hG);
return NULL;
}
OleLoadPicture(s,0,false,IID_IPicture,(void**)&p);
if (!p)
{
s->Release();
GlobalFree(hG);
return NULL;
}
s->Release();
GlobalFree(hG);
HANDLE hB = 0;
p->get_Handle((UINT *)&hB);
// Copy the image. Necessary, because upon p's release,
// the handle is destroyed.
HANDLE hBB = CopyImage(hB,IMAGE_BITMAP,0,0,LR_COPYRETURNORG);
p->Release();
// TRACE2("/nFILE: %s, HANDLE: 0x%x/n", FileName, hBB);
return hBB;
}
相关文章推荐
- 解决eWebEditor上传图片提示:请选择一个有效的文件,支持的格式有(GIF|JPG|JPEG|BMP|PNG)!
- photoshop 源文件psd 图片 转换格式成jpg、png、gif
- Java 转换png jpg gif格式图片的相互转换的实现
- C# 图片格式(JPG,BMP,PNG,GIF)等转换为ICO图标
- Delphi png、bmp、gif等图片格式转换成jpg
- Linux下图片 jpg、png、gif 与 eps 格式的相互转换
- [转载]C#图片格式(JPG,BMP,PNG,GIF)等转换为ICO图标
- 解决eWebEditor上传图片提示:请选择一个有效的文件,支持的格式有(GIF|JPG|JPEG|BMP|PNG)!
- 保存一个免费的在线的图片转换工具网站,支持BMP,JPG,IOC,PNG和GIF
- C# 图片格式(JPG,BMP,PNG,GIF)等转换为ICO图标
- java转换tiff图片格式成gif和jpg
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- 用java将png图片转换成jpg格式的图片
- 用API OleLoadPicture通过IStream来加载JPG、GIF格式的图片
- 浅谈图片格式GIF与JPG
- C++Builder中实现BMP,JPG图片格式的转换
- JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高) 这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV
- <<< 将一个rar格式的文件变成一张jpg图片,按照后缀来选择打开他的模式
- JPG png GIF BMP图片格式的区别