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 ...
随机推荐
- spring-data-jpa中save不触发数据库insert语句的问题
最近学习spring mvc,用到jpa简化DAO层代码,发现save死活不触发SQL语句,找了好久才解决这个问题,实在是坑.. <!-- 关键是这个bean,一定要设置正确才行 --> ...
- 立即执行函数(自执行函数) IIFE
// 最常用的两种写法 (function(){ /* code */ }()); // 老道推荐写法 (function(){ /* code */ })(); // 当然这种也可以 // 括号和J ...
- 在mmdetection中跑通MaskRCNN
1.将数据集转化成COCO格式数据集 Kaggle->COCO: https://github.com/pascal1129/airbus_rle_to_coco/blob/master/1_s ...
- CentOS下使用tcpdump网络抓包
tcpdump是Linux下的截获分析网络数据包的工具,对优化系统性能有很大参考价值. 安装 tcpdump不是默认安装的,在CentOS下安装: yum install tcpdump 在Ubunt ...
- List集合流处理类型小结
本文为博主原创,未经允许不得转载 对应实体类 import lombok.Getter; import lombok.Setter; @Getter @Setter public class Stud ...
- Oracle 创建,查询,删除 job
一 . 创建job 1. 通过创建存储过程的方式创建job 调用该存储过程使其开始执行 call PRO_DSJ_XJTJ_JOB(); create or replace procedure PR ...
- 【VS工具】vs2017中的一些小功能
一.json转为类 1.打开一个json文件,复制 2.打开一个.cs文件,将json粘贴为类 3.got it 二.C#交互窗口 1.视图->其他窗口->C#交互窗口 2.打开了一个窗 ...
- vstring.hpp
//vov #ifndef VSTRING_HPP #define VSTRING_HPP #include <string> #include <sstream> #incl ...
- UVALive - 5857 Captain Q's Treasure
UVALive - 5857 思路: 状压dp,用map写 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimi ...
- 注入(injector)
在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入. Java依赖注入设计原则允许我们移除硬编码依赖和 ...