首页
学习
活动
专区
圈层
工具
发布

C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。

在GDI+1.1的版本中,MS加入不少新的特性,其中的特效类Effect就是一个很有吸引力的东西,可惜在VS2010的Image类中,却没有把这个类封装进来(不晓得是不是我没有发现),这个也许...其实,这些函数我在VB6下两年前就已经调用过,调用的方式也很简单明了,现在,在学习C#,就要考虑如何将他们封装入C#中。...虽然哪些算法的更底层(像素级别的处理实现)实现在很早之前就已经实现,但是能够直接调用现有的函数对于不少朋友来说还是一件很幸福的事情的。...实现这个功能的第一步就是要找到这些函数的声明,这个在MSDN上有C风格的声明,改成C#语言的大部分都不成问题,参考 http://msdn.microsoft.com/en-us/library/ms533971...C#的Bitmap类的,或者你也可以声明为HandleRef类型的,VS就是这么干的, 对于最后几个参数,是用来给用户返回一些数据,基本上不会有人对那几个数据感兴趣,因此你声不声明为out类型的参数也无所谓

2.1K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++11 auto关键字:原理解析与使用指南

    一、auto类型推导原理C++11中auto的类型推导基于模板参数推导规则(C++标准ISO/IEC 14882:2011 §7.1.6.4),编译器通过初始化表达式的类型反向推导变量类型。...其核心规则可分为三种场景:1.1 按值推导(auto)当变量声明为auto var = expr时,推导行为类似于模板函数的按值参数传递:忽略顶层const/volatile限定符:若expr为const...)1.2 引用/指针推导(auto& / auto*)当变量声明为auto& var = expr或auto* var = expr时,推导行为类似于模板函数的引用/指针参数传递:保留底层const/volatile...2.2 模板函数中依赖参数的类型推导当模板函数的变量类型依赖于模板参数时,auto可避免手动推导复杂类型:template void process(T... struct A {}; // 错误:C++11不支持auto模板参数(C++17起支持)3.5 类成员变量与数组声明限制auto不能用于非静态类成员变量:struct S {

    18300

    2019年Java中高级面试题总结(7),228道系列查漏补缺!

    为什么会有这个问题? 108、适配器模式是什么?什么时候使用? 109、什么是“依赖注入”和“控制反转”?为什么有人使用? 110、抽象类是什么?它与接口有什么区别?你为什么要使用过抽象类?...@Before :在每个测试方法之前都执行一次, 方法需要声明为public @beforeclass :只在类中执行一次, 必须声明为public static 93、怎么检查一个字符串只包含数字?...首先,这是编译器的要求,如果不这么做,无法通过编译。其次,面向对象的编程,其中继承有个大原则,任何子类的对象都可以当成父类的对象使用。 107、什么情况下会违反迪米特法则?为什么会有这个问题?...迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减少类之间的耦合。 108、适配器模式是什么?什么时候使用? 适配器模式提供对接口的转换。...这个问题与前面的类似,适配器模式和代理模式的区别在于他们的意图不同。

    1.8K00

    C++面向对象程序设计(谭浩强)第三章第10~11节学习笔记

    ---- 3.10 友元 3.10.1友元函数 如果在本类以外的其他地方定义了一个函数(这个函数可以说是不属于任何类的非成员函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数...一个函数可以被多个类声明为“朋友”,这样就可以引用多个类中的私有数据。 3.10.2 友元类 可以将一个类B声明为另一个类A的“朋友”,此时B就是A的友元类。...也就是说,要在数据共享与信息隐蔽之间选择一个恰当的平衡点。 3.11 类模板 用一个模板实现一类多用  template 由于类模板包含类型参数,因此又称为参数化的类。...类模板是类的抽象,类是类模板的实例。...<< endl; }  在类模板外点过成员函数时,不能用一般定义类成员函数的形式。

    26120

    将模板申明为友元

    只有当函数模板(或类模板)被实例化之后生成模板函数(或模板类),该函数(或类)才能作为其他的类的友元。...为了叙述的方便,我们也称一个函数模板(或类模板)是一个类或类模板的友元,其实真正的含义是函数模板(或类模板)被实例化后生成的模板函数(模板类)作为类(或模板类)的友元。 1....把函数模板声明为类模板的友元 将函数模板申明为类模板的友元有三种方式。...---- 2.把类模板声明为类模板的友元 把类模板声明为类模板的友元可以有两种方式。 2.1在类模板内部对模板类进行友元申明 这里要注意是对实例化后的模板类将其申明为类模板的友元,而不是类模板。...2.2在类模板内部对类模板进行友元申明 这里要注意是直接将类模板申明为类模板的友元,而不是实例化后的模板咧,要与上面区别对待。

    87711

    C++设计模式:Template Method

    我使用过一个简单的后台服务框架.这个框架上手很容易,我只需要继承一个基类,同时实现,或重写(override)基类声明的几个接口(这些接口声明为虚函数,或者纯虚函数),然后调用基类定义好的run()函数...,派生类实现 } 其中收包,解包,回包,释放资源等动作,框架会提供一份实现,由于我们有时候会采用其他的数据协议,所以基类也将收包回包等函数声明为虚函数,允许我们针对新的协议进行函数的重写(override...但某个步骤有着特定的需求无法马上定义,需要延迟到派生类中去实现,这时候就需要采用模板方法模式.模板方法模式要解决的问题是:如何在确定稳定操作结构的前提下,灵活地应对各个子步骤的变化或者晚期实现需求?...而关于重构的关键技法,包括了: 静态->动态 早绑定->晚绑定 继承->组合 编译时依赖->运行时依赖 紧耦合->松耦合 接下来我们来看看如何将一个程序,重构成模板方法模式.现代软件专业分工之后,也出现了...Library类型,实际指向的对象为Application类型对象.它会调用到基类的run方法,遇到step2,step4函数时,通过虚函数机制,调用到派生类实现的step2,step4函数.

    52130

    【C++】泛型编程 ⑦ ( 类模板常用用法 | 类模板声明 | 类模板调用 | 类模板作为函数参数 )

    首先 , 要进行 具体类型 初始化 , 该操作就是在 模板类 后面的 尖括号中 , 注明 泛型类型 ; MyClass 此时 , 注明 泛型类型后 , 就会生成 具体的类 ; 然后 , 使用...具体的类 , 定义 具体的 变量 ; MyClass myInt(10); 3、类模板做函数参数 类模板 作为函数参数 , 形参 必须是具体类型 , 也就是 类模板 的泛型类型必须声注明 ;...下面的 fun 函数中 , 接收模板类作为参数 , 模板类的 泛型类型 需要被注明 ; // 类模板对象作为函数参数 // 形参必须是具体类型 // 类模板的泛型类型必须声注明 void fun(MyClass...这个类可以接受一个类型参数T , 并创建一个具有该类型的成员变量的对象 ; MyClass是一个模板类 , 该模板类 接受一个 泛型类型参数T , 泛型类型参数 T 在类中的许多地方都会用到 , 在类体中定义了一个..., 其中T是一个类型参数 ; 在类模板中 , 所有使用T的地方都可以被任何类型替换 ; MyClass myInt(10); 中的 是模板参数 , 表示这个类的类型参数是 int

    77200

    【C++】泛型编程 ⑦ ( 模板类常用用法 | 模板类声明 | 模板类调用 | 模板类作为函数参数 )

    首先 , 要进行 具体类型 初始化 , 该操作就是在 模板类 后面的 尖括号中 , 注明 泛型类型 ; MyClass 此时 , 注明 泛型类型后 , 就会生成 具体的类 ; 然后 , 使用...具体的类 , 定义 具体的 变量 ; MyClass myInt(10); 3、类模板做函数参数 类模板 作为函数参数 , 形参 必须是具体类型 , 也就是 类模板 的泛型类型必须声注明 ;...下面的 fun 函数中 , 接收模板类作为参数 , 模板类的 泛型类型 需要被注明 ; // 类模板对象作为函数参数 // 形参必须是具体类型 // 类模板的泛型类型必须声注明 void fun(MyClass...这个类可以接受一个类型参数T , 并创建一个具有该类型的成员变量的对象 ; MyClass是一个模板类 , 该模板类 接受一个 泛型类型参数T , 泛型类型参数 T 在类中的许多地方都会用到 , 在类体中定义了一个..., 其中T是一个类型参数 ; 在类模板中 , 所有使用T的地方都可以被任何类型替换 ; MyClass myInt(10); 中的 是模板参数 , 表示这个类的类型参数是 int

    1.4K40

    多态性 - C++中实现运行时多态的方式

    编译器会在编译时根据参数类型来生成具体的函数实现。模板函数的实现可以通过编译时的模板实例化来实现。...通过将函数声明为虚函数,我们可以在运行时根据对象的实际类型来确定要调用的函数实现。在C++中,只要将函数声明为虚函数即可实现动态多态。...2、抽象类 抽象类是指包含至少一个纯虚函数的类,这个类不能被实例化,只能用作基类来派生出其他类。在C++中,可以通过将函数声明为纯虚函数来实现抽象类。...Shape`中的函数`calculateArea`声明为纯虚函数,从而实现了抽象类。...抽象类不能被实例化,只能用作基类来派生出其他类。在调用函数`calculateArea`时,我们将基类指针指向派生类对象,可以看到运行时实际调用的是派生类的实现函数。

    63510

    C++11 defaulted和deleted函数从入门到精通

    基本概念Defaulted函数在C++中,类有四类特殊成员函数,分别是默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些特殊成员函数负责创建、初始化、销毁或者拷贝类的对象。...当程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,编译器会隐式地为这个类生成一个默认的特殊成员函数。...在模板编程中的应用禁用特定类型的模板实例化在模板编程中,我们可能希望某些类型禁止使用某个模板,这时可以使用deleted函数来实现。...例如:templatevoid process(T value) { // 处理逻辑}// 禁止使用int类型的模板实例化templatevoid process这个例子中,我们使用deleted函数禁止了process模板函数对int类型的实例化。

    15110

    【C++】基础:Effective C++高效编程建议

    理解 typename 的两个含义 43. 了解如何访问 templatized base classes(模板化基类)中的名字 44....如果 class(类)客户需要能对一个操作抛出的 exceptions(异常)做出回应,则那个 class(类)应该提供一个常规的函数(也就是说,non-destructor(非析构函数))来完成这个操作...当类型转换应该用于所有参数时,声明为非成员函数 如果你需要在一个函数的所有参数(包括被 this 指针所指向的那个)上使用类型转换,这个函数必须是一个非成员函数。 25....理解 inline 化的介入和排除 inline 函数背后的思想是用函数本体代替每一处对这个函数的调用。 若函数本体很短,可用 inline,反之则最好用函数调用,否则会使程序空间过于庞大。...理解 typename 的两个含义 43. 了解如何访问 templatized base classes(模板化基类)中的名字 44.

    58710

    C++ Template 基础篇(一):函数模板

    大家好,又见面了,我是你们的朋友全栈君。...函数模板定义 把处理不同类型的公共逻辑抽象成函数,就得到了函数模板。 函数模板可以声明为inline或者constexpr的,将它们放在template之后,返回值之前即可。...成员函数模板 不仅普通函数可以定义为模板,类的成员函数也可以定义为模板。...这是因为c++ compiler在parse一个类的时候就要确定vtable的大小,如果允许一个虚函数是模板函数,那么compiler就需要在parse这个类之前扫描所有的代码,找出这个模板成员函数的调用...* 有意思的是,还可以通过把函数模板赋值给一个指定类型的函数指针,让编译器根据这个指针的类型,对模板实参进行推断。

    1.9K20

    深入理解Spring框架的作用(Spring in action 学习笔记)激发POJO的潜能依赖注入应用切面使用模板消除样板式代码

    Spring的非侵入编程模型意味着这个类在Spring应用和非Spring应用中都可以发挥同样的作用。...Spring的非入侵式就是不强制类要实现Spring的任何接口或类,没有任何地方表明它是一个Spring组件。 意味着这个类在Spring应用和非Spring应用中都可以发挥同样的作用。...如果一个对象只通过接口(而不是具体实现或初始化过程) 来表明依赖关系, 那么这种依赖就能够在对象本身毫不知情的情况下, 用不同的具体实现进行替换 现在BraveKnight类可以接受你传递给它的任意一种...这里最大的问题在于: 我们该如何将SlayDragonQuest交给BraveKnight呢? 又如何将PrintStream交给SlayDragonQuest呢?...,同时将类的构造函数或者setter函数参数设置好,这是为了配置对象和对象之间的关系。

    1.3K30

    聊聊设计模式之模板方法模式

    因此我们可以想办法将除了第4个步骤之外的步骤“抽出来”进行复用,第4个步骤就让不同的数据库查询去“定制”就好了,这也就是模板方法的精髓:父类将一个算法的步骤定义好,将共同的步骤在父类实现以实现复用,而子类只要实现定制化的部分就行了...如果有其他的业务查询,只要继承QueryTemplate类并实现抽象方法resolveResultSet即可,从此以后我们就不用接触底层的JDBC操作了,而只要专注于如何将resultSet转换成业务bean...模板方法模式的改进 在上述例子中,想必大家都见识到模板方法模式的优点了,但是上述模板方法模式的实现有一个局限就是模板是定义在一个抽象类中的,子类必须继承父类才能对模板的某些步骤进行定制,而由于Java中只能单继承...如果你使用的是JDK8或JDK9,那么可以将模板声明为接口,复用的算法步骤使用default进行声明,这样的话子类只要实现父接口,然后实现自定义的算法步骤就行了,如此一来子类就能继承其他类了。...如果你使用的是JDK8以下,那么可以将定制化的算法步骤作为一个回调函数“传递”给模板类,这样一来就不用继承模板类了,实际上Spring的JdbcTemplate就是使用回调函数的方式实现模板方法模式的,

    761110

    学习记录——抽象类和密封类

    ①抽象类 C#允许把类和函数声明为abstract,抽象类不能实例化,抽象类可以包含普通函数和抽象函数,抽象函数就是只有函数定义,没有函数体。...如果将类看做是模板,那么抽象类就是一个不完整的模板,我们不能使用不完整的模板去构造对象。 抽象类和类成员 通过在类定义前面放置关键字 abstract,可以将类声明为抽象类。...例如: public abstract class A { // Class members here. } 抽象类不能实例化。 抽象类的用途是提供一个可供多个派生类共享的通用基类定义。...例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现。 抽象类也可以定义抽象方法。...由于密封类从不用作基类,所以有些运行时优化可以略微提高密封类成员的调用速度。 在对基类的虚成员进行重写的派生类上,方法、索引器、属性或事件可以将该成员声明为密封成员。

    47331

    C++17, 语言核心层变化的更多细节

    , 在C++17中, auto 的这种自动类型推导能力又进一步增强了,借助auto,函数模板和(类模板的)构造函数的模板参数可以根据其参数自动进行类型推导(细节介绍),非类型模板参数的类型也可以从参数中自动推导出来...(示例中的第一个模板)进行实例化,而第14行代码的实例化依据的则是偏特化模板版本(示例中的第二个模板)....case标签(或者default标签). nodiscard [[nodiscard]]属性可以用于函数声明,枚举声明以及类声明中.如果你丢弃了一个声明为[[nodiscard]]的函数的返回值,编译器就会产生一个编译警告....同样的,如果你丢弃了函数中返回的(声明为)[[nodiscard]]枚举或者(声明为)[[nodiscard]]类,编译器同样会给出警告,抑制该类警告的一种方法就是对返回值进行一次void转型操作....:类,typedef,变量,非静态成员变量,函数,枚举类型或者枚举值.

    90410

    《JAVA程序设计与实例》记录与归纳--类与对象

    类与对象 概念贴士: 1.  类必须先定义了才能使用。类是创建对象的模板,创建对象也叫类的实例化。 2.  ...在Java中,使用new关键字来创建对象,一般有一下3个步骤:     1)声   明:声明一个对象,包括对象名称和对象类型。     2)实例化:使用关键字new创建一个对象。     ...在构造函数中通过this引用来调用另一个构造函数,也就是相当于调用本类的其他构造方法,它必须作为构造方法的第一句(即作为方法名初始化对象)。(详见实例3-7) 11.  ...为了实现良好的封装性,通常将类的成员变量声明为private,再通过public的方法对这个变量进行访问。...代码行.7-9中 bark()是类中的函数,也叫方法,即定义犬吠这个方法。       代码行.11-13中 hungry()是类中的函数,也叫方法。 PS:一个类的变量可以包含以下类型变量。

    8010

    Java 小白成长记 · 第 5 篇《Java 是如何实现封装的 — 图解访问修饰符》

    类是构造对象的模板或蓝图。由类构造(construct) 对象的过程称为创建类的「实例 (instance )」....包的概念 在具体学习访问修饰符之前,我们还需要掌握包的概念,因为尽管 Java 设计了严格的访问修饰符,但是这种机制仍然不够完善,其中存在的问题就是如何将类库组件捆绑到一个内聚的类库单元中,意思就是说如何将某些有关联的类汇总到一个大的组织中进行统一管理...Cookie 类的构造函数是 public 的,所有的类都能访问它。...而如果将其声明为 protected,那么对于所有继承自 Cookie 的方法都可以使用它。 画个图帮助大家直观的理解(假设所有类都是 public): ?...⑤ 总结 四个访问修饰符介绍完毕,其实无非就是「类控制着哪些代码有权访问自己的成员」。其他包中的代码不能一上来就说"嗨,我是 「Bob」 的朋友!"

    62920

    C++为什么有参数依赖查找(ADL)?

    当名称冲突发生时,如果类型名称(类、结构体、联合体或枚举)不是通过typedef声明的,那么这个类型名称在查找时会被隐藏。这意味着,当你尝试使用这个名称时,编译器会首先查找非类型名称。...嵌套类查找:如果当前类是嵌套在另一个类中的,查找会扩展到包含这个嵌套类的外部类的定义中。同时,也会查找外部类的所有基类。...ADL:如果通常的未限定查找结果中包含类成员声明、块作用域中的函数声明(非using声明)或任何非函数或函数模板的声明,则不执行ADL。...查找合并:将普通未限定查找找到的声明集合与ADL找到的声明集合合并,并应用特殊规则,例如,通过ADL可见的关联类中的友元函数和函数模板,即使它们在普通查找中不可见。...是有明确命名空间的,这个命名空间在ADL的过程中被查找,因此最终找到了 std::sort 的函数声明。

    52210
    领券