在 lazarus 中安装 CCR.EXIF 包
Installing CCR.EXIF Package in lazarus
我已经安装了我发现 here 的软件包 CCR.EXIF。但是我有一些问题。
我找到了用于读取有关图像的 GPS 信息的代码,我尝试使用该代码,但我在 CheckTrue
上遇到错误,现在我不确定那是其他编程语言还是我制作的安装错误。
procedure TstExifLE.ReadGPSTest;
var
imgInfo: TImgInfo;
lTag: TTag;
begin
imgInfo := TImgInfo.Create;
try
imgInfo.LoadFromFile(WorkFile_JpegWithExif);
lTag := imgInfo.ExifData.TagByName['GPSVersionID'];
CheckTrue(lTag <> nil, 'Tag "GPSVersionID" not found');
CheckTrue(lTag is TVersionTag, 'Tag "GPSVersionID" is not TVersionTag');
TVersionTag(lTag).Separator := '.';
CheckEquals('2.3.0.0', lTag.AsString, 'Value mismatch of tag "GPSVersionID"');
lTag := imgInfo.ExifData.TagByName['GPSLatitude'];
CheckTrue(lTag <> nil, 'Tag "GPSLatitude" not found');
CheckTrue(lTag is TGPSPositionTag, 'Tag "GPSLatitude" is not a TGpsPositionTag');
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
CheckEquals('51 deg 33'' 48.28"', lTag.AsString, 'Value mismatch of tag "GPSLatitude"');
lTag := imgInfo.ExifData.TagByName['GPSLatitudeRef'];
CheckTrue(lTag <> nil, 'Tag "GPSLatitudeRef" not found');
CheckEquals('South', lTag.AsString, 'Value mismatch of tag "GPSLatitudeRef"');
lTag := imgInfo.ExifData.TagByName['GPSLongitude'];
CheckTrue(lTag <> nil, 'Tag "GPSLongitude" not found');
CheckTrue(lTag is TGPSPositionTag, 'Tag "GPSLongitude" is not a TGpsPositionTag');
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
CheckEquals('59 deg 49'' 53.55"', lTag.AsString, 'Value mismatch of tag "GPSLongitude"');
lTag := imgInfo.ExifData.TagByName['GPSLongitudeRef'];
CheckTrue(lTag <> nil, 'Tag "GPSLongitudeRef" not found');
CheckEquals('West', lTag.AsString, 'Value mismatch of tag "GPSLongitudeRef"');
finally
imgInfo.Free;
end;
end;
错误信息:
-Identifier not found 'TstExifLE'
-Identifier not found 'CheckTrue'
-Identifier not found 'CheckEquals'
编辑
我制作了 class TstExifLe,这是我得到的以下错误
Identifier not found 'TTestCase'
您找到的代码是 DUnit 测试的一部分。所有 DUnit 测试都源自 TTestCase,并使用方法 CheckTrue、CheckEquals 等作为测试已通过的断言。您将需要重构代码以消除对 DUnit 的需求以便对其进行编译,或者如果您只是想查看它的实际效果,请下载并安装 DUnit。
为了完整起见,这就是我提取 GPS 信息的方式:
procedure TForm1.ReadGPS;
var
imgInfo: TImgInfo;
lTag: TTag;
begin
imgInfo := TImgInfo.Create;
try
imgInfo.LoadFromFile(WorkFile_JpegWithExif);
lTag := imgInfo.ExifData.TagByName['GPSVersionID'];
Memo1.Lines.Add('GPSVersionID: ' + lTag.AsString);
lTag := imgInfo.ExifData.TagByName['GPSLatitude'];
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
Memo1.Lines.Add('GPSLatitude: ' + lTag.AsString);
lTag := imgInfo.ExifData.TagByName['GPSLatitudeRef'];
Memo1.Lines.Add('GPSLatitudeRef: ' + lTag.AsString);
lTag := imgInfo.ExifData.TagByName['GPSLongitude'];
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
Memo1.Lines.Add('GPSLongitude: ' + lTag.AsString);
lTag := imgInfo.ExifData.TagByName['GPSLongitudeRef'];
Memo1.Lines.Add('GPSLongitudeRef: ' + lTag.AsString);
finally
imgInfo.Free;
end;
end;
我已经安装了我发现 here 的软件包 CCR.EXIF。但是我有一些问题。
我找到了用于读取有关图像的 GPS 信息的代码,我尝试使用该代码,但我在 CheckTrue
上遇到错误,现在我不确定那是其他编程语言还是我制作的安装错误。
procedure TstExifLE.ReadGPSTest;
var
imgInfo: TImgInfo;
lTag: TTag;
begin
imgInfo := TImgInfo.Create;
try
imgInfo.LoadFromFile(WorkFile_JpegWithExif);
lTag := imgInfo.ExifData.TagByName['GPSVersionID'];
CheckTrue(lTag <> nil, 'Tag "GPSVersionID" not found');
CheckTrue(lTag is TVersionTag, 'Tag "GPSVersionID" is not TVersionTag');
TVersionTag(lTag).Separator := '.';
CheckEquals('2.3.0.0', lTag.AsString, 'Value mismatch of tag "GPSVersionID"');
lTag := imgInfo.ExifData.TagByName['GPSLatitude'];
CheckTrue(lTag <> nil, 'Tag "GPSLatitude" not found');
CheckTrue(lTag is TGPSPositionTag, 'Tag "GPSLatitude" is not a TGpsPositionTag');
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
CheckEquals('51 deg 33'' 48.28"', lTag.AsString, 'Value mismatch of tag "GPSLatitude"');
lTag := imgInfo.ExifData.TagByName['GPSLatitudeRef'];
CheckTrue(lTag <> nil, 'Tag "GPSLatitudeRef" not found');
CheckEquals('South', lTag.AsString, 'Value mismatch of tag "GPSLatitudeRef"');
lTag := imgInfo.ExifData.TagByName['GPSLongitude'];
CheckTrue(lTag <> nil, 'Tag "GPSLongitude" not found');
CheckTrue(lTag is TGPSPositionTag, 'Tag "GPSLongitude" is not a TGpsPositionTag');
TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"';
CheckEquals('59 deg 49'' 53.55"', lTag.AsString, 'Value mismatch of tag "GPSLongitude"');
lTag := imgInfo.ExifData.TagByName['GPSLongitudeRef'];
CheckTrue(lTag <> nil, 'Tag "GPSLongitudeRef" not found');
CheckEquals('West', lTag.AsString, 'Value mismatch of tag "GPSLongitudeRef"');
finally
imgInfo.Free;
end;
end;
错误信息:
-Identifier not found 'TstExifLE'
-Identifier not found 'CheckTrue'
-Identifier not found 'CheckEquals'
编辑 我制作了 class TstExifLe,这是我得到的以下错误
Identifier not found 'TTestCase'
您找到的代码是 DUnit 测试的一部分。所有 DUnit 测试都源自 TTestCase,并使用方法 CheckTrue、CheckEquals 等作为测试已通过的断言。您将需要重构代码以消除对 DUnit 的需求以便对其进行编译,或者如果您只是想查看它的实际效果,请下载并安装 DUnit。
为了完整起见,这就是我提取 GPS 信息的方式:
procedure TForm1.ReadGPS; var imgInfo: TImgInfo; lTag: TTag; begin imgInfo := TImgInfo.Create; try imgInfo.LoadFromFile(WorkFile_JpegWithExif); lTag := imgInfo.ExifData.TagByName['GPSVersionID']; Memo1.Lines.Add('GPSVersionID: ' + lTag.AsString); lTag := imgInfo.ExifData.TagByName['GPSLatitude']; TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"'; Memo1.Lines.Add('GPSLatitude: ' + lTag.AsString); lTag := imgInfo.ExifData.TagByName['GPSLatitudeRef']; Memo1.Lines.Add('GPSLatitudeRef: ' + lTag.AsString); lTag := imgInfo.ExifData.TagByName['GPSLongitude']; TGpsPositionTag(lTag).FormatStr := '%0:.0f deg %1:.0f'' %2:.2f"'; Memo1.Lines.Add('GPSLongitude: ' + lTag.AsString); lTag := imgInfo.ExifData.TagByName['GPSLongitudeRef']; Memo1.Lines.Add('GPSLongitudeRef: ' + lTag.AsString); finally imgInfo.Free; end; end;