利用Delphi为Visual C++添加JPEG图形处理功能

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
利用 DelphiVisual C++ 添加 JPEG 图形处理功能 Visual C++对 JPEG等常见图形格式的支持不够一直是为人所诟病的缺陷,相比起来, Delphi/C++ Builder在这方面就要强得多了。由于 JPEG是实际应用中经常使用的图形格式,如果你是 Visual C++用户的话,自然会想如何让 Visual C++能够处理 JPEG图形。虽然网络上现在已经有了不少能够处理 JPEG图形的 Visual C++库,但是别人的东西用起来总有点不那么得心应手,而且经常有一些限制,比如有名的ImageObject库要求必须静态链接到MFC DLL,给使用带来很多不便;如果是ActiveX控制的话,又不得不考虑如何注册等麻烦的问题。实际上,借助于 DelphiJPEG图形的强大处理功能,自己写一段小小的代码,就能够在几分钟内让 Visual C++也用上 JPEG,DIY的感觉就是不同!要用本文介绍的代码,你手头应该有一套 Delphi(3.0以上的版本)和一套 Visual C++(5.0以上版本)。由于本文的代码非常简单,因此下面的代码不作注释,相信对这两套语言稍有基础的朋友都不难理解。在 Delphi中新建一个DLL工程ImageLib,并 添加一个MainFn.pas单元。文件清单如下:// ImageLib.dpr项目内容library ImageLib;usesSysUtils,Classes,MainFn in 'MainFn.pas';exports Create JPEGImage, Load JPEGImage, Free JPEGImage, Draw JPEGImage;beginend./ MainFn.pas单元内容///unit MainFn;interfaceusesSysUtils, Classes, Windows, Graphics, JPEG;function Create JPEGImage:T JPEGImage;stdcall;export;function Load JPEGImage(image:T JPEGImage;szFileName:PChar):LongBool;stdcall;export;procedure Free JPEGImage(image:T JPEGImage);stdcall;export;procedure Draw JPEGImage(hdc:HDC;x,y:integer;image:T JPEGImage);stdcall;export;implementationfunction Create JPEGImage:T JPEGImage;var image : T JPEGImage;begin try image := T JPEGImage.Create; result := image; except result := nil; end;end;function Load JPEGImage(image:T JPEGImage;szFileName:PChar):LongBool;var strFileName : string;begin try strFileName := StrPas(szFileName); image.LoadFromFile(strFileName); result := True; except result := False; end;end;procedure Free JPEGImage(image:T JPEGImage);begin image.Free;end;procedure Draw JPEGImage(hdc:HDC;x,y:integer;image:T JPEGImage);var Canvas : TCanvas;begin Canvas := TCanvas.Create; Canvas.Handle := hdc; Canvas.Draw(x,y,image); Canvas.Free;end;end.项目编译完成后生成的Dll就可以直接在 Visual C++中使用了。以下是用 Visual C++生成的测试项目内容,使用Dialog Based框架:typedef void* P JPEG;/*function Create JPEGImage:T JPEGImage;stdcall;export;function Load JPEGImage(image:T JPEGImage;szFileName:PChar):LongBool;procedure Free JPEGImage(image:T JPEGImage);stdcall;export;procedure Draw JPEGImage(hdc:HDC;x,y:integer;image:T JPEGImage);stdcall;export;*/typedef P JPEG (__stdcall* CREATE JPEGIMAGE)();typedef BOOL (__stdcall* LOAD JPEGIMAGE)(P JPEG,LPCSTR);typedef void (__stdcall* FREE JPEGIMAGE)(P JPEG);typedef void (__stdcall* DRAW JPEGIMAGE)(HDC,int,int,P JPEG);class CTDlg : public CDialog{...public: HINSTNACE m_hLib; CREATE JPEGIMAGE pCreate JPEGImage; LOAD JPEGIMAGE pLoad JPEGImage; FREE JPEGIMAGE pFree JPEGImage; DRAW JPEGIMAGE pDraw JPEGImage;}BOOL CTDlg::OnInitDialog(){ ... m_hLib = LoadLibrary("ImageLib.dll"); pCreate JPEGImage = (CREATE JPEGIMAGE)GetProcAddress(m_hLib,"Create JPEGImage"); pLoad JPEGImage = (LOAD JPEGIMAGE)GetProcAddress(m_hLib,"Load JPEGImage"); pFree JPEGImage = (FREE JPEGIMAGE)GetProcAddress(m_hLib,"Free JPEGImage"); pDraw JPEGImage = (DRAW JPEGIMAGE)GetProcAddress(m_hLib,"Draw JPEGImage");} void CTDlg::OnDestroy(){ if (m_hLib) FreeLibrary(m_hLib);}void CTDlg::OnPaint(){ CPaintDC dc(this); P JPEG p JPEG; p JPEG = (*pCreate JPEGImage)(); if (p JPEG) { if ((*pLoad JPEGImage)(p JPEG,"c:/test.jpg")) (*pDraw JPEGImage)(dc.m_hDC,0,0,p JPEG); (*pFree JPEGImage)(p JPEG); }} <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值