在此先感谢 CxImage 的作者,为我们提供如此优秀的开源图像处理库。
下载 CxImage 控件,网址如下,可根据自己品台选择,这里选择 BCB6 的版本
下载地址:http://www.xdp.it/download.htm
编译内部所有 Project ,TIFF 编译会出一个小错误 TLib 空间不足,对项目选项修改之,使之大于等于建议值,这里设 Page size 为 32,重新编译通过,虽然有N多警告,没法了。
最终生成8个Lib文件。
创建新的测试项目,导入所有Lib,include ximage.h 文件
----------------------------------------------------------------------------
// 载入文件
String fext = ExtractFileExt(PictureFilename).LowerCase();
// 初始化验证值,变量来自 ximage.h
int format = CXIMAGE_FORMAT_UNKNOWN;
// 对扩展名进行判断
if ( fext == ".tif" || fext == "tiff" )
{
format = CXIMAGE_FORMAT_TIF;
}
else if ( fext == ".jpg" || fext == ".jpeg" )
{
format = CXIMAGE_FORMAT_JPG;
}
else if ( fext == ".bmp" )
{
format = CXIMAGE_FORMAT_BMP;
}
else if ( fext == ".png" )
{
format = CXIMAGE_FORMAT_PNG;
}
/*
else if ( fext == ".ico" )
{
format = CXIMAGE_FORMAT_ICO;
}
else if ( fext == ".tga" )
{
format = CXIMAGE_FORMAT_TGA;
}
else if (fext == "wmf" || fext == "emf" )
{
format = CXIMAGE_FORMAT_WMF;
}
else if (fext == "j2k" || fext == "jp2" )
{
format = CXIMAGE_FORMAT_J2K;
}
else if ( fext == ".gif")
{
format = CXIMAGE_FORMAT_GIF;
}
else if ( fext == "pcx" )
{
format = CXIMAGE_FORMAT_PCX;
}
*/
else
{
return CXIMAGE_FORMAT_UNKNOWN;
}
// Invalidate(); // 调用Invalidate(),会触发WMPaint消息进行重画。
if ( FileExists(PictureFilename) == false || format == CXIMAGE_FORMAT_UNKNOWN )
{
// 文件没有找到
return CXIMAGE_FORMAT_UNKNOWN;
}
// 创建 CxImage 对象
CxImage* cxImage = new CxImage;
// CxImage 对象读取文件
try
{
cxImage->Load(PictureFilename.c_str(), format);
}
catch (...)
{
delete cxImage;
return;
}
// 创建 BitMap 对象接收 CxImage 数据
if ( cxImage->IsValid() == true )
{
bmpGraphic = new Graphics::TBitmap;
bmpGraphic->Width = cxImage->GetWidth();
bmpGraphic->Height = cxImage->GetHeight();
// 设置Bitmap尺寸
TRect DrowRect(0, 0, cxImage->GetWidth(), cxImage->GetHeight());
// Drop Bitmap
cxImage->Draw2(bmpGraphic->Canvas->Handle, DrowRect);
}
delete cxImage;
// cxImage->Save() 方法可将其保存为其他格式文件
// CxImage 还有很多方法,如果你愿意,可以作一个具备一定功能的画图软件
// Bitmap 对象成功获取后也可以很方便的进行处理,例如向 Form Drow 图等