Bueno, ya tengo practicamente finalizada la librería. El único método exportado es:
y la estructura que emplea es tal que así:Código:DNG_SAVE_API int DNG_Save(unsigned char * raw_image, int width, int height, tDNG_Parameters & dng_params, tExif & exif, unsigned char * XMP_Buffer, unsigned int XMP_Size)
la del exif es eterna... vamos a implementar todo o sólo los importantes? De momento implementados están: apertura, tiempo de exposición, ISO y focal. La estructura es (he quitado los parametros de GPS):Código:struct tDNG_Parameters { //////////////////////////////////////////////////// //Camera profile: needed to develop correct colors / //////////////////////////////////////////////////// char * stCameraProfileName; // Colorimetric matrix for illuminant 1 double dCameraMatrix1[9]; unsigned int uiCameraIluminant1; // Colorimetric matrix for illuminant 2 double dCameraMatrix2[9]; unsigned int uiCameraIluminant2; //////////////////////////////////////////////////// //////////////////////////////////////////////////// //Bayer Mosaic: colors used and distribution /////// //////////////////////////////////////////////////// unsigned int uiBayerColorkeys[4]; unsigned int uiBayerPattern; //////////////////////////////////////////////////// //////////////////////////////////////////////////// // Maximum/minimum levels to use in 16bit data ///// //////////////////////////////////////////////////// unsigned int uiWhiteSaturation; unsigned int uiBlackLevel; //////////////////////////////////////////////////// // Exposure correction double dBaselineExposure; // Noise index double dBaselineNoise; // Sharpness needed double dBaselineSharpness; /// "AsShot" white balance double dWhiteBalance[3]; // Green Split (how far away are green pixels, usually zero) unsigned int uiGreenSplit; // Camera name char * stModelName; char * stLocalModelName; // Image orientation unsigned int uiOrientation; //// Final image size // Crop Origin (from top-left) unsigned int uiCropOriginX; unsigned int uiCropOriginY; // Crop Size unsigned int uiCropWidth; unsigned int uiCropHeight; // Active area (same as image, modify it if there's some masked pixels) // Active Origin (from top-left) unsigned int uiActiveOriginX; unsigned int uiActiveOriginY; // Active Size unsigned int uiActiveWidth; unsigned int uiActiveHeight; }
Como veis, es un monstruo. ¿Qué hacemos con ella?Código:struct tExif { char * fImageDescription; char * fMake; char * fModel; char * fSoftware; char * fArtist; char * fCopyright; char * fCopyright2; char * fUserComment; tDateTime fDateTime; tDateTime fDateTimeStorageInfo; tDateTime fDateTimeOriginal; tDateTime fDateTimeOriginalStorageInfo; tDateTime fDateTimeDigitized; tDateTime fDateTimeDigitizedStorageInfo; unsigned int fTIFF_EP_StandardID; unsigned int fExifVersion; unsigned int fFlashPixVersion; tRational fExposureTime; tRational fFNumber; tRational fShutterSpeedValue; tRational fApertureValue; tRational fBrightnessValue; tRational fExposureBiasValue; tRational fMaxApertureValue; tRational fFocalLength; tRational fDigitalZoomRatio; tRational fExposureIndex; tRational fSubjectDistance; tRational fGamma; tRational fBatteryLevelR; char * fBatteryLevelA; unsigned int fExposureProgram; unsigned int fMeteringMode; unsigned int fLightSource; unsigned int fFlash; unsigned int fFlashMask; unsigned int fSensingMethod; unsigned int fColorSpace; unsigned int fFileSource; unsigned int fSceneType; unsigned int fCustomRendered; unsigned int fExposureMode; unsigned int fWhiteBalance; unsigned int fSceneCaptureType; unsigned int fGainControl; unsigned int fContrast; unsigned int fSaturation; unsigned int fSharpness; unsigned int fSubjectDistanceRange; unsigned int fSelfTimerMode; unsigned int fImageNumber; unsigned int fFocalLengthIn35mmFilm; unsigned int fISOSpeedRating; unsigned int fSubjectAreaCount; unsigned int fSubjectArea [4]; unsigned int fComponentsConfiguration; tRational fCompresssedBitsPerPixel; unsigned int fPixelXDimension; unsigned int fPixelYDimension; tRational fFocalPlaneXResolution; tRational fFocalPlaneYResolution; unsigned int fFocalPlaneResolutionUnit; unsigned int fCFARepeatPatternRows; unsigned int fCFARepeatPatternCols; unsigned int fRelatedImageWidth; unsigned int fRelatedImageLength; char * fCameraSerialNumber; tRational fLensInfo [4]; char * fLensID; char * fLensName; char * fLensSerialNumber; tRational fFlashCompensation; char * fOwnerName; char * fFirmware; };
A nivel de funcionalidad sólo me queda calcular el preview correcto. Había pensado por no tener problemas de copyright hacer un diezmado al 50% en ambos ejes, con lo que queda una imagen de width/2 x height/2 que no necesita interpolación, un R de bayer es un R de la imagen final, un B de bayer es un B en la imagen final, y dos G de bayer se promedian para ser un G en la imagen final. Luego aplico el calibrado de cámara y el balance de blancos y guardo el resultado como preview.
Dudas, opiniones, sugerencias...?




LinkBack URL
About LinkBacks




Citar




.
, o al menos eso creo recordar )
Marcadores