随着移动设备和互联网技术的飞速发展,开发者面临着在多个平台上开发应用程序的挑战。为了满足这一需求,LEADTOOLS提供了一套全面的软件开发工具包(SDK),支持包括WinRT、Windows Phone、HTML5、iOS、OS X、Android和Linux在内的多种开发平台。LEADTOOLS不仅提供了丰富的图像查看器、注释、标记、条码、OCR、PDF、图像格式、压缩、图像处理等功能,还为开发者提供了一个易于使用的接口,无论是针对单一平台还是多平台开发,都能轻松应对。
LEADTOOLS的跨平台库设计使得在不同平台上的应用程序开发具有相似性,这对于希望在多个平台上创建原生应用版本的开发者来说是一个显著的优势。即使计划是为单一平台开发,LEADTOOLS也为每个主要平台提供了程序员友好的接口,让开发者能够在未来轻松扩展。
LEADTOOLS Anywhere™ SDKs提供了专为.NET、HTML5、WinRT、Windows Phone、iOS、OS X和Android设计的图像查看器控件。它支持加载、转换和保存超过150种图像格式,包括PDF、PDF/A、JPEG、JPEG 2000、TIFF、JBIG2等常见格式的高级位深度、颜色空间和压缩支持。此外,它还支持QR、PDF417、Data Matrix、UPC/EAN等条码的读取和写入,以及将图像转换为可搜索文本、PDF和DOC的OCR功能。它还提供了包括几何形状、便签、红action、高亮和橡皮图章在内的200多个图像处理功能,用于增强、校正和操作图像。
以下示例将展示如何将平台原生图像转换为LEADTOOLS RasterImage,并使用条码引擎获取其符号(例如UPC/EAN、Code 128、QR Code、Data Matrix等)、位置和编码值。或者,开发者可以使用RasterCodecs对象加载和保存他们的图像。然而,使用LEAD的转换工具对于现有应用程序来说是一个强大的资产,因为它只需要对当前的代码库进行最小的更改。
System.Drawing.Bitmap bitmap = ...;
// 获取平台图像的LEADTOOLS RasterImage
RasterImage rasterImage = RasterImageConverter.FromImage(bitmap);
// 创建LEADTOOLS条码引擎实例
private BarcodeEngine barcodeEngine = new BarcodeEngine();
// 读取图像中找到的第一个条码
BarcodeData barcodeData = barcodeEngine.Reader.ReadBarcode(rasterImage, LogicalRectangle.Empty, BarcodeSymbology.Unknown);
// 简单地在控制台输出条码类型、位置和数据
if (barcodeData != null) {
Console.WriteLine("Symbology:{0}", barcodeData.Symbology);
Console.WriteLine("Location:{0},{1},{2},{3}", barcodeData.Bounds.X, barcodeData.Bounds.Y, barcodeData.Bounds.Width, barcodeData.Bounds.Height);
Console.WriteLine("Value:{0}", barcodeData.Value);
} else {
Console.WriteLine("No barcodes found");
}
Windows.UI.Xaml.Media.ImageSource imageSource = ...;
// 获取平台图像的LEADTOOLS RasterImage
RasterImage rasterImage = RasterImageConverter.ConvertFromImageSource(imageSource, ConvertFromImageOptions.None);
// 创建LEADTOOLS条码引擎实例
private BarcodeEngine barcodeEngine = new BarcodeEngine();
// 读取图像中找到的第一个条码
BarcodeData barcodeData = barcodeEngine.Reader.ReadBarcode(rasterImage, LogicalRectangle.Empty, BarcodeSymbology.Unknown);
// 简单地在控制台输出条码类型、位置和数据
if (barcodeData != null) {
Console.WriteLine("Symbology:{0}", barcodeData.Symbology);
Console.WriteLine("Location:{0},{1},{2},{3}", barcodeData.Bounds.X, barcodeData.Bounds.Y, barcodeData.Bounds.Width, barcodeData.Bounds.Height);
Console.WriteLine("Value:{0}", barcodeData.Value);
} else {
Console.WriteLine("No barcodes found");
}
UIImage* uiImage = ...;
// 获取平台图像的LEADTOOLS RasterImage
LTRasterImage* rasterImage = [LTRasterImageConverter convertFromImage:uiImage options:LTConvertFromImageOptions_None error:nil];
// 创建LEADTOOLS条码引擎实例
LTBarcodeEngine* barcodeEngine = [LTBarcodeEngine new];
// 读取图像中找到的第一个条码
LTBarcodeData* barcodeData = [barcodeEngine.reader readBarcode:rasterImage searchBounds:LeadRect_Empty() symbologies:nil symbologiesCount:0 error:nil];
// 简单地检索条码类型、位置和数据
if (barcodeData != nil) {
NSLog(@"Symbology:%u", barcodeData.symbology);
NSLog(@"Location:%u,%u,%u,%u", barcodeData.bounds.x, barcodeData.bounds.y, barcodeData.bounds.width, barcodeData.bounds.height);
NSLog(@"Value:%@", barcodeData.value);
} else {
NSLog(@"No barcodes found");
}
android.graphics.Bitmap bitmap = ...;
// 获取平台图像的LEADTOOLS RasterImage
RasterImage rasterImage = RasterImageConverter.convertFromBitmap(bitmap, ConvertFromImageOptions.NONE);
// 创建LEADTOOLS条码引擎实例
private BarcodeEngine barcodeEngine = new BarcodeEngine();
// 读取图像中找到的第一个条码
BarcodeData barcodeData = barcodeEngine.getReader().readBarcode(rasterImage, LeadRect.getEmpty(), BarcodeSymbology.UNKNOWN);
// 简单地在控制台输出条码类型、位置和数据
if (barcodeData != null) {
Log.i("LEADTOOLS.BarcodeDemo", String.format("Symbology:%s", barcodeData.getSymbology()));
Log.i("LEADTOOLS.BarcodeDemo", String.format("Location:%1$s,%2$s,%3$s,%4$s", barcodeData.getBounds().getX(), barcodeData.getBounds().getY(), barcodeData.getBounds().getWidth(), barcodeData.getBounds().getHeight()));
Log.i("LEADTOOLS.BarcodeDemo", String.format("Value:%s", barcodeData.getValue()));
} else {
Log.i("LEADTOOLS.BarcodeDemo", "No barcodes found");
}