文档章节

GdiPlus[46]: IGPMatrix 矩阵(一)

涂孟超
 涂孟超
发布于 2014/09/26 15:38
字数 612
阅读 8
收藏 0
点赞 0
评论 0

认识矩阵, 譬如这是一个 2*3 (2 行 3 列) 的矩阵:
┏       ┓
┃3  1  4┃
┃2  5  0┃
┗       ┛

 
 
 
 
 

 

 

  

矩阵相加的例子:
┏    ┓   ┏    ┓   ┏    ┓
┃1  0┃   ┃2  4┃   ┃3  4┃
┃0  2┃ + ┃1  5┃ = ┃1  7┃
┃1  3┃   ┃0  6┃   ┃1  9┃
┗    ┛   ┗    ┛   ┗    ┛

 
 
 
 
 

 

 

  

在 GDI+ 中应用的矩阵运算是 "相乘".

矩阵相乘有个前提: 就是第一个矩阵的 "列数" 要和第二个矩阵的 "行数" 一致.
譬如: 矩阵 A*B 要乘以 矩阵 M*N, 要求 B = M.

GDI+ 中用到的 IGPMatrix 是 3*3 的, TGPColorMatrix 是 5*5 的, 都符合这个条件.

矩阵 A*B 与 M*N 相乘后会得到一个 A*N 的新矩阵;

譬如一个 "2 行 3 列" 的矩阵与 "3 行 4 列" 的矩阵相乘, 会得到一个 "2 行 4 列" 的新矩阵.

从下面例子中可以看出相乘的方法:
┏       ┓   ┏      ┓   ┏                            ┓   ┏        ┓
┃1  2  3┃   ┃7   8 ┃   ┃1*7+2*9+3*11   1*8+2*10+3*12┃   ┃58   64 ┃
┃       ┃ * ┃9   10┃ = ┃                            ┃ = ┃        ┃
┃4  5  6┃   ┃11  12┃   ┃4*7+5*9+6*11   4*8+5*10+6*12┃   ┃130  154┃
┗       ┛   ┗      ┛   ┗                            ┛   ┗        ┛

 
 
 
 
 

 

 

  

因为 GDI+ 是二维的, IGPMatrix 矩阵的第 3 列一直是 0, 0, 1, 但为了相乘运算也必须有这个位置.

它们看起来是下面的样子:
┏         ┓    ┏         ┓
┃1   0   0┃    ┃1   0   0┃
┃0   1   0┃ or ┃0   1   0┃
┃2   3   1┃    ┃4   5   1┃
┗         ┛    ┗         ┛

 
 
 
 
 

 

 

  

假如让上面两个矩阵相乘, 下面分别用 "手动运算" 与 "GDI+的函数运算" 对照下结果.

手动运算:
┏         ┓   ┏         ┓   ┏                                       ┓   ┏         ┓
┃1   0   0┃   ┃1   0   0┃   ┃1*1+0*0+0*4   1*0+0*1+0*5   1*0+0*0+0*1┃   ┃1   0   0┃
┃0   1   0┃ * ┃0   1   0┃ = ┃0*1+1*0+0*4   0*0+1*1+0*5   0*0+1*0+0*1┃ = ┃0   1   0┃
┃2   3   1┃   ┃4   5   1┃   ┃2*1+3*0+1*4   2*0+3*1+1*5   2*0+3*0+1*1┃   ┃6   8   1┃
┗         ┛   ┗         ┛   ┗                                       ┛   ┗         ┛

 
 
 
 
 

 

 

  

一个 IGPMatrix 矩阵的默认值(或者说单位矩阵)是:
┏         ┓
┃1   0   0┃
┃0   1   0┃
┃0   0   1┃
┗         ┛
//对角线上是 1, 其他都是 0; 这个默认值可通过 IGPMatrix.Reset 方法获取.

 
 
 
 
 

 

 

  

根据各个位置的功能, GDI+ 给各位置命名如下(第三列没有意义也没有命名):
┏             ┓
┃M11   M12   0┃
┃M21   M22   0┃
┃DX    DY    1┃
┗             ┛

 
 
 
 
 

 

 

  

上面测试的例子, 只是 DX 与 DY 的值非默认, 因而下面的测试也可以简单些:

uses GdiPlus;

procedure TForm1.FormCreate(Sender: TObject);
var
  Matrix1, Matrix2: IGPMatrix;
begin
  Matrix1 := TGPMatrix.Create;
  Matrix2 := TGPMatrix.Create;

  Matrix1.SetElements(1, 0, 0, 1, 2, 3); //参数顺序是: M11 M12 M21 M22 DX DY
  Matrix2.SetElements(1, 0, 0, 1, 4, 5);

  Matrix1.Multiply(Matrix2);

  ShowMessageFmt('DX:%g, DY:%g', [Matrix1.OffsetX, Matrix1.OffsetY]);
  //结果是: DX:6, DY:8
end;

 
 
 
 
 

 

 

  

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

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
GDI+图像处理学习笔记——改变图像的透明度

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

晨曦之光 ⋅ 2012/05/23 ⋅ 0

GDI+里面的问题。。。。。。。。。。

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

xxdd ⋅ 2013/10/24 ⋅ 0

vs 2005 添加GDI配置

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

种地瓜 ⋅ 2015/12/08 ⋅ 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 ⋅ 0

VS2008中使用GDI+

include <objbase.h> #include <gdiplus.h> #pragma comment(lib, "gdiplus.lib") using namespace Gdiplus; 定义全局 无符号长整形指针 ULONGPTR 如 ULONGPTR gdiplusupToken; 在构造函数里......

ryany ⋅ 2011/03/20 ⋅ 0

MFC用GDI+动感歌词的制作

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

长平狐 ⋅ 2012/10/08 ⋅ 0

在DLL中调用createwindows,报错1407

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

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

VC中使用GDI+实现为按钮加载Png图片

VC中使用GDI+实现为按钮加载Png图片 作者:flyfish 2010-3-15 一、在stdafx.h文件中添加头文件,命名空间,库的引用, #include usingnamespaceGdiplus; #pragmacomment( lib, "gdiplus.lib"...

冯京宝 ⋅ 2010/10/31 ⋅ 0

模仿酷狗7(Kugou7)音乐魔方界面源码

源码名称:模仿酷狗7(Kugou7)界面源码 源码作者:邓学彬(泪闯天涯) 源码说明:内含VC++源码、易语言源码各一份.包含所有图片源码(使用Fireworks编辑) 开发环境:VC版--VS2005、Gdiplus;易语...

邓学彬 ⋅ 2012/12/09 ⋅ 0

C#找出所有可以连起来的坐标

给出一个数组 15 16 24 27 34 37 43 44 46 48 54 56 58 66 67 68 。 这些数是一个6*8矩阵的坐标点。原点为(1,1)十位数为纵坐标 个位数为横坐标。 现在找出所有能连起来的点。如 24 34 44 5...

CSharp_NET ⋅ 2013/05/30 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 17分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 28分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 28分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 29分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 36分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 38分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 39分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 40分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 40分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 41分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部