У меня есть программа 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 является правильным. Но тогда я теряюсь, что еще могло вызвать ошибку.