0

我有一个围绕 edsdk 构建的 Delphi 程序。我可以拍照,下载原始文件的直接jpg。但是当我得到一个原始(CR2)文件时,我无法显示结果。任何解决方案都可以做到这一点,但我最近的尝试是遵循这个答案,因为我很难将大多数其他示例的 c#-code 转换为 Delphi。这就是我现在所拥有的:

procedure   TShooter.JPegFromRaw(rawFileName, JPegFileName: TFileName);
var rawStream, jpgStream: EdsStreamRef;
    imgRef: EdsImageRef;
    imageInfo: EdsImageInfo;
    jpgQuality: EdsSaveImageSetting;
begin
    try
        jpgQuality.JPEGQuality      := 9;
        jpgQuality.iccProfileStream := nil;
        jpgQuality.reserved         := 0;

        raiseError(EdsCreateFileStream(PChar(rawFileName),
                                   kEdsFileCreateDisposition_OpenExisting,
                                   kEdsAccess_Read, rawStream));
        raiseError(EdsCreateFileStream(PChar(JPegFileName),
                                   kEdsFileCreateDisposition_CreateAlways,
                                   kEdsAccess_Write, jpgStream));

        raiseError(EdsCreateImageRef(rawStream, imgRef));
        raiseError(EdsGetImageInfo(imgRef, kEdsImageSrc_FullView, imageInfo));
        raiseError(EdsSaveImage(imgRef, kEdsTargetImageType_Jpeg, jpgQuality, jpgStream));

    finally
        raiseError(EdsRelease(jpgStream));
        raiseError(EdsRelease(rawStream));
        raiseError(EdsRelease(imgRef));
    end { try };
end;

执行此操作时,它会在最后一行 ( EdsSaveImage(...)) 中抛出 EDS_ERR_INVALID_HANDLE。之前的那一行并没有真正影响结果,但由于它也使用了 imgRef,所以我把它留在那里。由于它返回 ERR_OK,我假设 imgRef 是正确的。但后来我迷失了还有什么可能导致错误。

4

1 回答 1

0

SDK 版本 3.2 已删除原始图像支持

我认为您现在应该使用 DPP(Digital Photo Professional)。在早期版本中,DPP 与 SDK 一起提供,原始图像函数只是在后台使用它。

于 2020-04-04T14:06:13.713 回答