向“阿发伯”(maozefa)问上关于Delphi GDI+相关有关问题

向“阿发伯”(maozefa)问下关于Delphi GDI+相关问题
背景:

  之前承其他同事的项目,他使用Delphi 与 GDI+ ,对JPG 进行叠加文字处理。使用了一个“IGDIPlus.pas”的库
  使用:IGpGraphics, IGPImage, IGpBitmap声明变量,但在下面,创建时,使用的是 TGpGraphics,TGPImage等
  
  代码:

var
  ...
  ...
  oBmp: IGPImage;
  oG: IGPGraphics;


begin

...
...
    oBmp := TGPBitmap.Create(nW, nH);
    oG := TGPGraphics.Create(oBmp);
    oG.DrawImage(oImg, 0, 0, oImg.Width, oImg.Height);
    oBmp.Save(sFileName, encoderClsid, @EParam);
    oBmp := nil;
...
...

end;
 


之前有听说IGPGraphics是接口类,但不知其所以然,想请阿发伯,大概说说,IGPGraphics与TGPGraphics,I和T在操作上,是否有什么特别注意的地方。还有,之前项目,用到的是“IGDIPlus.pas”库,和阿发伯提供下载的“Gdiplus.pas, GdipTypes.pas, GdipUtil.pas, GdipExport.pas”,有所不同。
也请阿发伯介绍下,两种库的区别特点。
------解决方案--------------------
接口与类的区别,弄清楚就明白了
------解决方案--------------------
接口你用完它自己会释放,接口只是一个方法列表的声明,具体由类来实现
------解决方案--------------------
接口实际就是一个方法表,类似于虚方法表,实际中用的不少,但开发接口基本不怎么接触,我觉得接口最大的好处就是多继承很容易,比如有2个类Tbmp和Tjpg分别操作bmp和jpg图片,现在想弄个新的类既能操作bmp也能操作jpg比如叫TPic,按照理解TPic完全可以通过继承Tbmp和Tjpg得来,可类是无法多继承的,这样是不行的
type
  TPic = class(Tbmp, Tjpg);

但如果有Ibmp和Ijpg接口的就可以实现多继承了(Tbmp是Ibmp的实现,Tjpg是Ijpg的实现)
type
  TPic = class(TInterfacedObject, Ibmp, Ijpg);
在类TPic里委托实现Ibmp和Ijpg就使TPic即可处理bmp又可处理jpg了。
------解决方案--------------------
三言两语可说不清,自己看书吧,《Delphi高级应用开发教程》里有这方面的内容,接口是Delphi的一个重要功能。