C# [GDI+] [API] Get Image bytes Length
MemoryBMP "{b96b3caa-0728-11d3-9d7b-0000f81ef32e}"
2 Bmp "{b96b3cab-0728-11d3-9d7b-0000f81ef32e}"
Emf "{b96b3cac-0728-11d3-9d7b-0000f81ef32e}"
Wmf "{b96b3cad-0728-11d3-9d7b-0000f81ef32e}"
Jpeg "{b96b3cae-0728-11d3-9d7b-0000f81ef32e}"
Png "{b96b3caf-0728-11d3-9d7b-0000f81ef32e}"
7 Gif "{b96b3cb0-0728-11d3-9d7b-0000f81ef32e}"
Tiff "{b96b3cb1-0728-11d3-9d7b-0000f81ef32e}"
Exif "{b96b3cb2-0728-11d3-9d7b-0000f81ef32e}"
PhotoCD "{b96b3cb3-0728-11d3-9d7b-0000f81ef32e}"
FlashPIX "{b96b3cb4-0728-11d3-9d7b-0000f81ef32e}"
Icon "{b96b3cb5-0728-11d3-9d7b-0000f81ef32e}"
static int GetImageEncoder(GpImage* image, CLSID* clsidEncoder)
{
int f = ;
uint uenc = 0u, usize = 0u;
GUID guid;
if (GdipGetImageEncodersSize(&uenc, &usize) == )
{
ImageCodecInfo* pici = (ImageCodecInfo*)LocalAlloc(0u, (void*)usize);
if (GdipGetImageEncoders(uenc, usize, pici) == )
{
if (GdipGetImageRawFormat(image, &guid) == )
{
for (int i = ; i < uenc; i++)
{
if (pici->FormatID == guid)
{
*clsidEncoder = pici->Clsid;
f = ;
break;
}
pici++;
}
}
}
LocalFree(pici);
}
return f;
}
static int GetEncoderClsid(GUID format, CLSID* clsidEncoder)
{
int f = ;
uint uenc = 0u, usize = 0u;
if (GdipGetImageEncodersSize(&uenc, &usize) == )
{
ImageCodecInfo* pici = (ImageCodecInfo*)LocalAlloc(0u, (void*)usize);
if (GdipGetImageEncoders(uenc, usize, pici) == )
{
for (int i = ; i < uenc; i++)
{
if (pici->FormatID == format)
{
*clsidEncoder = pici->Clsid;
f = ;
break;
}
pici++;
}
}
GlobalFree(pici);
}
return f;
}
static int GetEncoderClsid(string format, CLSID* clsidEncoder)
{
int f = ;
uint uenc = 0u, usize = 0u;
ushort* psz = _L(format);
if (GdipGetImageEncodersSize(&uenc, &usize) == )
{
ImageCodecInfo* pici = (ImageCodecInfo*)LocalAlloc(0u, (void*)usize);
if (GdipGetImageEncoders(uenc, usize, pici) == )
{
for (int i = ; i < uenc; i++)
{
if (lstrcmpW(pici->MimeType, psz) == )
{
*clsidEncoder = pici->Clsid;
f = ;
break;
}
pici++;
}
}
GlobalFree(pici);
}
_Lr(psz);
return f;
}
static int GetImageLength(GpImage* image, GUID format, void** usize)
{
int f = ;
CLSID clsid;
if (GetEncoderClsid(format, &clsid) != )
{
void* hgbl = GlobalAlloc(GMEM_MOVEABLE, null);
void* pstm;
if (SUCCEEDED(CreateStreamOnHGlobal(hgbl, , &pstm)))
{
if (GdipSaveImageToStream(image, pstm, &clsid, null) == )
{
*usize = GlobalSize(hgbl);
f = ;
}
//Marshal.Release((IntPtr)pstm);
}
GlobalFree(hgbl);
}
return f;
}
static int GetImageLength(GpImage* image, string format, void** usize)
{
int f = ;
CLSID clsid;
if (GetEncoderClsid(format, &clsid) != )
{
void* hgbl = GlobalAlloc(GMEM_MOVEABLE, null);
void* pstm;
if (SUCCEEDED(CreateStreamOnHGlobal(hgbl, , &pstm)))
{
if (GdipSaveImageToStream(image, pstm, &clsid, null) == )
{
*usize = GlobalSize(hgbl);
f = ;
}
//Marshal.Release((IntPtr)pstm);
}
GlobalFree(hgbl);
}
return f;
}
//invoke:
GpImage* image;
uint usize;
/*
...
Create or Load Image
...
*/
GetImageLength(image, "image/jpeg", &usize);
C# [GDI+] [API] Get Image bytes Length的更多相关文章
- C# [Win32] [GDI+] [API] Load HFONT from Memory
// gdiplusenums.h //-------------------------------------------------------------------------- // Fo ...
- 跨域请求——WebClient通过get和post请求api
AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求 string url = string.Format("htt ...
- 微软Face API体验——人脸检测
微软推出了全新REST API,现在可免费获取密钥,大家可以赶快申请!申请地址:https://cn.projectoxford.ai/subscription 看了网站的API介绍,忍不住赶快体验一 ...
- c# 请求api获得json数据
public static string HttpGet(string Url) { HttpWebRequest request = (HttpWebRequest)WebRequest.Creat ...
- GDI+编程说明及小结
原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...
- 翻译Android USB HOST API
翻译Android USB HOST API 源代码地址:http://developer.android.com/guide/topics/connectivity/usb/host.html 译者 ...
- 转载-常用API接口签名验证参考
原文地址: http://www.cnblogs.com/hnsongbiao/p/5478645.html 写的很好,就做个笔记了.感谢作者! 项目中常用的API接口签名验证方法: 1. 给app分 ...
- GDI编程
图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...
- GDI编程小结
图形设备接口(GDI)是一个可运行程序,它接受Windows应用程序的画图请求(表现为GDI函数调用),并将它们传给对应的设备驱动程序,完毕特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...
随机推荐
- 使用go-template自定义kubectl get输出
kubectl get相关资源,默认输出为kubectl内置,一般我们也可以使用-o json或者-o yaml查看其完整的资源信息.但是很多时候,我们需要关心的信息并不全面,因此我们需要自定义输出的 ...
- 关于Tomcat启动时,长时间停在Initializing Spring root webApplicationContext处的原因
1.大家肯定经常会遇到这样的问题,以前启动tomcat都不会出问题.现在一起动就会卡到Initializing Spring root webApplicationContext处,tomcat会报连 ...
- python进阶(一)
一.调试Debugging应用 (1)命令行内运行 $ python -m pdb my_script.py 这会触发debugger在脚本第⼀⾏指令处停⽌执⾏.这在脚本很短时会很有帮助.你可以通过( ...
- Python模块1
序列化模块: 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. jso ...
- ARDUINO入门按键通信试验
1.1按键实验 1.需要学习的知识: 1) Arduino 的输入口配置方法,配置函数的用法 通过pinMode()函数,可以将ADUINO的引脚配置(INPUT)输入模式 2) 搞懂什么是抖动 机械 ...
- Java基础学习-Eclipse综述和运算符的使用
1.Eclipse的概述(磨刀不误砍柴工) -Eclipse是一个IDE(集成开发环境) -IDE(Intergrated Development Environment) ...
- Git访问远程出现错误
错误示例 remote: HTTP Basic: Access denied fatal: Authentication failed for "xxx" 错误原因 由于修改了公司 ...
- [转载]EXCEL绝对引用中$A$1、A$1、$A1三个的区别?
转自:https://zhidao.baidu.com/question/167695289.html EXCEL绝对引用中$A$1.A$1.$A1三个的区别? 符号“$”加在不地方的含义有何不同? ...
- Pandorabox(Openwrt) 双宽带(WAN) 叠加网络实战
准备 一台已经刷好Pandorabox(Openwrt)的路由器.两条宽带 实战环境 固件:PandoraBox R8.1.12 By Lean 硬件:K2P A1版 过程 配置VLAN 为了将一个L ...
- 内网环境使用ansible安装software 需要外网时,如何绑定代理呢
内网环境使用ansible安装software 需要外网时,如何绑定代理呢? 方法一: 在ansible 的脚本里,yum install 的地方,添加语句: environment: https_p ...