EdsSaveImage выбрасывает EDS_ERR_INVALID_HANDLE - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть программа Delphi, созданная на основе edsdk. Я могу сделать снимок, скачать прямой JPG сырых файлов. Но когда я получаю необработанный (CR2) -файл, я не могу отобразить результат. Любое решение для достижения этой цели подойдет, но моя последняя попытка состояла в том, чтобы следовать этому ответу , поскольку у меня возникают трудности с переводом c# -кода большинства других примеров в 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;

При выполнении этого в последней строке выдается EDS_ERR_INVALID_HANDLE (EdsSaveImage(...)). Строка до этого на самом деле не влияет на результат, но так как она также использует imgRef, я оставил ее там. Поскольку он возвращает ERR_OK, я предполагаю, что imgRef является правильным. Но тогда я теряюсь, что еще могло вызвать ошибку.

1 Ответ

0 голосов
/ 04 апреля 2020

Поддержка необработанных изображений была удалена с SDK версии 3.2

Я думаю, вы должны использовать DPP (Digital Photo Professional) сейчас. В более ранних версиях DPP поставлялся вместе с SDK, а функции необработанного изображения просто использовали это в фоновом режиме.

...