文档章节

GdiPlus[49]: 图像(一) 概览

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 689
阅读 7
收藏 0
点赞 0
评论 0

三个主要的图像相关接口是: IGPImage、IGPBitmap、IGPMetafile.

IGPBitmap、IGPMetafile 都是从 IGPImage 继承, 分别用于处理位图和图元文件.

还有从 IGPBitmap 继承的 IGPCachedBitmap 用于快速呈现图像.

IGPImage 的方法与属性:
//方法
IGPImage.Clone;                     { 克隆 }
IGPImage.Save();                    { 按指定格式保存到文件或流 }
IGPImage.SaveAdd();                 { 给许可多页的图像添加页 }
IGPImage.GetPhysicalDimension();    { 获取图像的大小(宽、高) }
IGPImage.GetBounds();               { 以指定单位获取图像的边界矩形 }
IGPImage.GetThumbnailImage();       { 获取缩略图 }
IGPImage.GetFrameDimensions;        { 获取一个 GUID 数组, 每个 GUID 代表一帧 }
IGPImage.GetFrameCount();           { 获取帧数 }
IGPImage.SelectActiveFrame();       { 选择指定索引的帧为当前帧 }
IGPImage.RotateFlip();              { 旋转图像 }
IGPImage.GetPropertyItem();         { 获取属性项 }
IGPImage.SetPropertyItem();         { 设置属性项 }
IGPImage.RemovePropertyItem();      { 删除属性项 }
IGPImage.GetEncoderParameterList(); { 获取图像编码器支持的参数信息 }

//属性
IGPImage.ImageType;            { 图像类型(Bitmap/Metafile/Unknown) }
IGPImage.Width;                { 宽度(单位是像素) }
IGPImage.Height;               { 高度(单位是像素) }
IGPImage.HorizontalResolution; { 获取水平分辨率(以"像素/英寸"为单位) }
IGPImage.VerticalResolution;   { 获取垂直分辨率(以"像素/英寸"为单位) }
IGPImage.Flags;                { 获取图像像素的属性标志 }
IGPImage.RawFormat;            { 获取图像的文件格式 }
IGPImage.PixelFormat;          { 获取图像的像素格式 }
IGPImage.Palette;              { 获取或设置调色板 }
IGPImage.PropertyIdList;       { 获取图像属性 ID 数组 }
IGPImage.PropertyItems;        { 获取图像属性集合 }

 
 
 
 
 

 

 

  

IGPBitmap 在 IGPImage 的基础上添加的方法与属性:
//方法
IGPBitmap.GetHBitmap();    { 创建 GDI 格式的 Bitmap 并返回句柄 }
IGPBitmap.GetHIcon;        { 创建 Icon 文件并返回句柄 }
IGPBitmap.LockBits();      { 锁定对象中内存中的像素数据 }
IGPBitmap.UnlockBits();    { 解除 LockBits 的锁定 }
IGPBitmap.SetResolution(); { 设置分辨率 }

//属性
IGPBitmap.Pixels;          { 获取或设置指定像素的颜色 }

 
 
 
 
 

 

 

  

IGPMetafile 在 IGPImage 的基础上添加的方法与属性:
//方法
IGPMetafile.GetMetafileHeader; { 获取 Metafile 的 MetafileHeader }
IGPMetafile.GetHEnhMetafile;   { 获取增强型 Metafile 的 Windows 句柄 }
IGPMetafile.PlayRecord();      { 播放单个图元文件记录 }

//属性
IGPMetafile.DownLevelRasterizationLimit; {  }

 
 
 
 
 

 

 

  

还有几个图像相关的公共内联函数:
function GetPixelFormatSize();     { 返回指定像素格式的颜色深度(每个像素的位数) }
function IsIndexedPixelFormat();   { 判断像素格式是否是索引的 }
function IsAlphaPixelFormat();     { 判断像素格式是否包含 alpha 信息 }
function IsCanonicalPixelFormat(); { 像素格式是否是每个像素 32 位(标准) }
function IsExtendedPixelFormat();  { 像素格式是否是每个像素 64 位 }

 
 
 
 
 

 

 

  

另外还有 IGPImageAttributes 等多个辅助接口.

上面提到过的 IGPCachedBitmap 没有自己独有的方法和属性, 下面的例子是它和 IGPBitmap 的对比测试:

//测试结果是 CachedBitmap 比 Bitmap 快 3 倍左右.
uses GdiPlus;

procedure TForm1.Button1Click(Sender: TObject);
const
  count = 1000;
var
  Graphic: IGPGraphics;
  Bitmap: IGPBitmap;
  CachedBitmap: IGPCachedBitmap;
  t1,t2,x,y: Cardinal;
  i: Integer;
begin
  Graphic := TGPGraphics.Create(Handle);
  Bitmap := TGPBitmap.Create('C:\GdiPlusImg\Texture.jpg');
  CachedBitmap := TGPCachedBitmap.Create(Bitmap, Graphic);
  x := ClientWidth - Bitmap.Width;
  y := ClientHeight - Bitmap.Height;

  t1 := GetTickCount;
  for i := 0 to count - 1 do
    Graphic.DrawImage(Bitmap, Random(x), Random(y));
  t1 := GetTickCount - t1;

  t2 := GetTickCount;
  for i := 0 to count - 1 do
    Graphic.DrawCachedBitmap(CachedBitmap, Random(x), Random(y));
  t2 := GetTickCount - t2;

  Text := Format('%d : %d', [t1, t2]);
end;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/25/1632409.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
VC实现多格式图像的转换

色彩鲜艳漂亮的高品质图像,一个个形象生动的Windows图标,高速运动、活灵活现的三维动画,这些无一不显示出程序设计者的艺术才华。在程序设计中,图像处理已经成为每个程序员的必修课。 在V...

余二五
2017/11/06
0
0
Wine 1.1.21 发布

Wine 1.1.21 现已发布。本版本主要带来了以下改进: 初步支持 shader model 4 能够从 X11 程序中复制/粘贴图像 对 GDIPlus 进行了改善 winemaker 支持 64 位 有关此版本的更新详情,可以查阅...

红薯
2009/05/10
128
0
GDI+图像处理学习笔记——改变图像的透明度

GDI+是WindowsXp和windows Server 2003中的一个子系统,主要用于处理系统的绘制消息。GDI+是GDI的扩展,其继承了GDI的有点并在其基础上进行了改进,包括增加了一些GDI无法绘制的图形函数,同...

晨曦之光
2012/05/23
491
0
DotNetCore跨平台~System.DrawingCore部署Linux需要注意的

你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingCore,这点不用改 安装gdiplus插件,这个需要...

mcy247
2017/12/05
0
0
MFC边框重绘

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
509
0
图表编辑器TMS Diagram Studio更新至v4.14,支持RAD Studio 10.2 Tokyo

TMS Diagram Studio是一款功能强大的图表控件,专为您的应用程序添加示意图和流程图表。 TMS Diagram Studio点击下载>>> v4.14 改进:更改handle检测的顺序。 修复:预览/打印错误。 修复:T...

Harriet666
2017/10/19
0
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
85
0
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:program filesmicrosoft sdkswindowsv7.0aincludegdiplusheaders.h(630) : 参见“G......

xxdd
2013/10/24
60
0
MFC用GDI+动感歌词的制作

源代码:http://download.csdn.net/detail/nuptboyzhb/4219669 源代码: 1. 插入一个对话框的资源,删除默认控件,并为对话框创建一个类,命名为ClyricDlg; 2. 在对话框的头文件中添加GDI+相...

长平狐
2012/10/08
236
0
在DLL中调用createwindows,报错1407

//初始化 AtlAxWinInit(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); //名字和当......

哈大哈傻瓜
2016/03/27
116
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

面试宝典-什么是缓存穿透?

缓存穿透是说收到了一个请求,但是该请求缓存里没有,只能去数据库里查询,然后放进缓存。 这里面有两个风险,一个是同时有好多请求访问同一个数据,然后业务系统把这些请求全发到了数据库;...

suyain
8分钟前
0
0
vue基础知识练习2

一、发送AJAX请求 <div id="demo1"><button @click="send">发送AJAX请求</button><button @click="sendGet">GET方式发送AJAX请求</button><button @click="sendPost">POST方式发送A......

一个yuanbeth
10分钟前
0
0
Xamarin Essentials教程磁力计Magnetometer

Xamarin Essentials教程磁力计Magnetometer 磁力计也叫地磁、磁感器,可用于测试磁场强度和方向。在手持设备中,通过磁力计可以计算设备的左右、前后倾斜角度,广泛应用于手机各种的应用中。...

大学霸
15分钟前
0
0
mesos:Authentication timed out

最近当slave开始慢慢部署异地集群的时候又碰上了这个问题 I0717 10:27:11.695762 28852 slave.cpp:895] New master detected at master@192.168.2.161:5050I0717 10:27:11.695811 28852 sl......

xueyi28
21分钟前
0
0
赋予用户库的读写权限

1、创建用户 CREATE USER 'test'@'%' IDENTIFIED BY '15ht46389012t'; #'%' - 所有情况都能访问;‘localhost’ - 本机才能访问;’192.168.1.2‘ - 指定 ip 才能访问 2、赋予权限 grant al...

xixingzhe
22分钟前
0
0
Spring核心——JSR250与资源控制

JSR-175与元编程 要说明JSR-250先要解释清楚JSR-175,要解释清楚JSR就的先了解JCP是什么。网上资料很多,就不细说了,简单的说JCP(Java Community Process)是管理Java生态(包括J2SE、J2E...

随风溜达的向日葵
23分钟前
2
0
Java面试基础篇——第五篇:类的实例化顺序

类的实例化顺序:包括 1.父类静态数据,构造函数,字段;2.子类静态数据,构造函数,字段等, 当我们new一个对象的时候,类实例化的顺序是怎么样的呢? OK.还是上代码比较实在(我就是个实在...

developlee的潇洒人生
24分钟前
0
0
引入mui.css出现闪屏问题

自己写的选项卡切换功能,引入了mui.css样式,当我切换选项卡时,页面会出现闪动,当我把mui.css注释掉后页面就不会出现闪动问题,由于mui.css文件太大,我也不知道什么属性引起的闪屏,所以...

爱喝水的小熊
27分钟前
1
0
大家都在学的编程语言 Python,可以用来干什么?

编者按:Python因为简单全面易用而成为近年来大热的编程语言。但是很多人学习了这门余元的语法和基本功能之后却不知道Python能干什么以及怎么做。Realpython.com上面的一篇文章于是把Python可...

Python燕大侠
43分钟前
2
0
学习大数据必备的5大核心技术,你知道几个?需要掌握哪些知识?

大数据已经成为时代发展的趋势,很多人纷纷选择学习大数据,想要进入大数据行业。大数据技术体系庞大,包括的知识较多,系统的学习大数据可以让你全面掌握大数据技能。学习大数据需要掌握哪些...

董黎明
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部