`
sogotobj
  • 浏览: 615783 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

GDI+在Delphi程序的应用 – 真彩色图像转索引图像

阅读更多

最近有几张真彩色图片需要转换为GIF图片,直接用GDI+位图转换存储效果太差,网上搜索半天,也没找到完全合适的,有关Delphi语言和GDI+转换的详细资料更是没发现,只好自己写了几个Delphi类,发表在这里供大家参考。

下面是几个真彩色转索引图像类的完整代码:

代码中共定义了四个类:TColorNode是一个八叉树颜色节点类;TIndexTree是图像转换基类,支持真彩色转换256色和16色图像,绝大部分转换工作都写在了这个类中;TBitmapIndexTree是Delphi的TGraphic对象转换类;TGpBitmapIndexTree是GDI+位图转换类。代码没做大的优化,除了一个数据拷贝过程TIndexTree.CopySourceData和像素色彩的调色板匹配方法TIndexTree.GetIndexColor采用了BASM代码,其余都采用纯Delphi代码(TIndexTree.GetIndexColor也有一个被注销的纯Delphi代码,可供参考)。

下面是GDI+32位PNG图像转256色图片例子代码(保存代码没在例子中):

效果图如下,左边是PNG源图,中间是转换后存储的白色背景GIF图片(设置ColorBackground属性可改变背景颜色),右边是没经过转换直接存储的GIF图片:

PNG源图转换后存储的GIF图片直接存储的GIF

下面是TJPEGImage对象真彩色转256色图像例子:

效果图如下(上边是JPEG源图,下边是转换后的256色GIF图像):

JPEG源图

JPEG图像转换后的

代码中所用Gdiplus单元下载地址及BUG更正见文章《GDI+ for VCL基础 -- GDI+ 与 VCL》。

建议和指导请来信:maozefa@hotmail.com

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics