本文整理汇总了C++中LibRaw::recycle方法的典型用法代码示例。如果您正苦于以下问题:C++ LibRaw::recycle方法的具体用法?C++ LibRaw::recycle怎么用?C++ LibRaw::recycle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LibRaw
的用法示例。
在下文中一共展示了LibRaw::recycle方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rawFileIdentify
bool KDcraw::rawFileIdentify(DcrawInfoContainer& identify, const QString& path)
{
QFileInfo fileInfo(path);
QString rawFilesExt(rawFiles());
QString ext = fileInfo.suffix().toUpper();
identify.isDecodable = false;
if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.toUpper().contains(ext))
return false;
LibRaw raw;
int ret = raw.open_file((const char*)(QFile::encodeName(path)).constData());
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run open_file: " << libraw_strerror(ret);
raw.recycle();
return false;
}
ret = raw.adjust_sizes_info_only();
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run adjust_sizes_info_only: " << libraw_strerror(ret);
raw.recycle();
return false;
}
Private::fillIndentifyInfo(&raw, identify);
raw.recycle();
return true;
}
示例2: loadHalfPreview
bool KDcraw::loadHalfPreview(QByteArray& imgData, const QString& path)
{
QFileInfo fileInfo(path);
QString rawFilesExt(rawFiles());
QString ext = fileInfo.suffix().toUpper();
if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.toUpper().contains(ext))
return false;
qCDebug(LIBKDCRAW_LOG) << "Try to use reduced RAW picture extraction";
LibRaw raw;
int ret = raw.open_file((const char*)(QFile::encodeName(path)).constData());
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run dcraw_process: " << libraw_strerror(ret);
raw.recycle();
return false;
}
QImage image;
if (!Private::loadHalfPreview(image, raw))
{
qCDebug(LIBKDCRAW_LOG) << "KDcraw: failed to get half preview: " << libraw_strerror(ret);
return false;
}
QBuffer buffer(&imgData);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "JPEG");
return true;
}
示例3: loadEmbeddedPreview
bool KDcraw::loadEmbeddedPreview(QByteArray& imgData, const QBuffer& buffer)
{
QString rawFilesExt(KDcrawIface::KDcraw::rawFiles());
LibRaw raw;
QByteArray inData = buffer.data();
int ret = raw.open_buffer((void*) inData.data(), (size_t) inData.size());
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run open_buffer: " << libraw_strerror(ret);
raw.recycle();
return false;
}
return (Private::loadEmbeddedPreview(imgData, raw));
}
示例4: main
int main(int ac, char *av[])
{
int i, ret;
LibRaw RawProcessor;
if(ac<2)
{
printf(
"multirender_test - LibRaw %s sample. Performs 4 different renderings of one file\n"
" %d cameras supported\n"
"Usage: %s raw-files....\n"
,LibRaw::version(), LibRaw::cameraCount(),
av[0]);
return 0;
}
for (i=1;i<ac;i++)
{
printf("Processing file %s\n",av[i]);
if( (ret = RawProcessor.open_file(av[i])) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot open_file %s: %s\n",av[i],libraw_strerror(ret));
continue; // no recycle b/c open file will recycle itself
}
if( (ret = RawProcessor.unpack() ) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot unpack %s: %s\n",av[i],libraw_strerror(ret));
continue;
}
process_once(RawProcessor,0,0,0,1,-1,av[i]); // default flip
process_once(RawProcessor,1,0,1,2,-1,av[i]);
process_once(RawProcessor,1,1,0,3,-1,av[i]); // default flip
process_once(RawProcessor,1,1,0,4,1,av[i]); // flip 1
process_once(RawProcessor,1,1,0,5,3,av[i]); // flip 3
process_once(RawProcessor,1,1,0,6,1,av[i]); // 1 again same as 4
process_once(RawProcessor,1,1,0,7,-1,av[i]); // default again, same as 3
process_once(RawProcessor,0,0,0,8,-1,av[i]); // same as 1
RawProcessor.recycle(); // just for show this call
}
return 0;
}
示例5: datastream
static BOOL DLL_CALLCONV
Validate(FreeImageIO *io, fi_handle handle) {
LibRaw RawProcessor;
BOOL bSuccess = TRUE;
// wrap the input datastream
LibRaw_freeimage_datastream datastream(io, handle);
// open the datastream
if(RawProcessor.open_datastream(&datastream) != LIBRAW_SUCCESS) {
bSuccess = FALSE; // LibRaw : failed to open input stream (unknown format)
}
// clean-up internal memory allocations
RawProcessor.recycle();
return bSuccess;
}
示例6:
extern "C" JNIEXPORT jshortArray JNICALL Java_com_androsz_andslr_LibRaw_getThumbnailDimensions(JNIEnv * env, jobject obj, jstring jfilename)
{
LibRaw raw;
jboolean bIsCopy;
const char* strFilename = (env)->GetStringUTFChars(jfilename , &bIsCopy);
// Open the file and read the metadata
raw.open_file(strFilename);
(env)->ReleaseStringUTFChars(jfilename, strFilename);// release jstring
// Let us unpack the image
raw.unpack_thumb();
jshortArray js = (env)->NewShortArray(sizeof(jshort)*2);
//env->SetShortArrayRegion(js,0,sizeof(jshort),(jshort*)raw.imgdata.thumbnail.theight);
//env->SetShortArrayRegion(js,sizeof(jshort),sizeof(jshort)*2,(jshort*)raw.imgdata.thumbnail.twidth);
raw.recycle();
return js;
}
示例7: openImage
void ImageLoader_raw_p::openImage (QString imagePath)
{
m_rawProcessor.recycle();
m_rawProcessor.open_file( imagePath.toAscii() );
}
示例8: if
//.........这里部分代码省略.........
{
goto end;
}
DEBUG_INFO if ((ret = RawProcessor->unpack_thumb()) != LIBRAW_SUCCESS)
{
goto end;
}
DEBUG_INFO imageDescription = env->NewObject(imageDescription_class, imageDescription_init);
// Setting fields
printf("[Native] flip = %d\n", RawProcessor->imgdata.sizes.flip);
DEBUG_INFO env->SetIntField(imageDescription, flip_id, RawProcessor->imgdata.sizes.flip); // 0 - no rotation; 3 - 180-deg rotation; 5 - 90-deg counterclockwise, 6 - 90-deg clockwise
printf("[Native] iso speed = %f\n", RawProcessor->imgdata.other.iso_speed);
env->SetFloatField(imageDescription, isoSpeed_id, RawProcessor->imgdata.other.iso_speed);
printf("[Native] shutter = %f\n", RawProcessor->imgdata.other.shutter);
env->SetFloatField(imageDescription, shutter_id, RawProcessor->imgdata.other.shutter);
printf("[Native] aperture = %f\n", RawProcessor->imgdata.other.aperture);
env->SetFloatField(imageDescription, aperture_id, RawProcessor->imgdata.other.aperture);
printf("[Native] focal length = %f\n", RawProcessor->imgdata.other.focal_len);
env->SetFloatField(imageDescription, focalLength_id, RawProcessor->imgdata.other.focal_len);
printf("[Native] shot order = %d\n", RawProcessor->imgdata.other.shot_order);
env->SetIntField(imageDescription, shotOrder_id, RawProcessor->imgdata.other.shot_order);
DEBUG_INFO time_con = RawProcessor->imgdata.other.timestamp;
printf("[Native] timestamp = %d\n", time_con);
//timestamp = env->NewObject(date_class, date_init, time_con);
//env->SetObjectField(imageDescription, timeStamp_id, timestamp);
DEBUG_INFO env->SetLongField(imageDescription, timeStamp_id, time_con);
printf("[Native] description = %s\n", RawProcessor->imgdata.other.desc);
env->SetObjectField(imageDescription, description_id, env->NewStringUTF(RawProcessor->imgdata.other.desc));
printf("[Native] artist = %s\n", RawProcessor->imgdata.other.artist);
env->SetObjectField(imageDescription, artist_id, env->NewStringUTF(RawProcessor->imgdata.other.artist));
printf("[Native] camera maker = %s\n", RawProcessor->imgdata.idata.make);
env->SetObjectField(imageDescription, cameraMaker_id, env->NewStringUTF(RawProcessor->imgdata.idata.make));
printf("[Native] camera model = %s\n", RawProcessor->imgdata.idata.model);
env->SetObjectField(imageDescription, cameraModel_id, env->NewStringUTF(RawProcessor->imgdata.idata.model));
DEBUG_INFO
fflush(stdout);
DEBUG_INFO previewBitmap = env->NewObject(previewBitmap_class, previewBitmap_init);
// Getting bitmap field ids
jfieldID r_id, g_id, b_id, width_id, height_id;
r_id = env->GetFieldID(previewBitmap_class, "r", "J");
g_id = env->GetFieldID(previewBitmap_class, "g", "J");
b_id = env->GetFieldID(previewBitmap_class, "b", "J");
width_id = env->GetFieldID(previewBitmap_class, "width", "I");
height_id = env->GetFieldID(previewBitmap_class, "height", "I");
PreviewBitmap thumb;
// Extracting and saving the thumbnail picture
DEBUG_INFO image = RawProcessor->dcraw_make_mem_thumb(&ret);
if (image == 0)
{
goto end;
}
printf("[Native] Image type: %s\n", (image->type == LIBRAW_IMAGE_JPEG) ? "jpeg" : "bitmap");
if (image->type == LIBRAW_IMAGE_JPEG)
{
decode_jpeg(thumb, image->data, image->data_size);
}
else
{
decode_plain(thumb, image->width, image->height, image->data, image->data_size);
}
DEBUG_INFO
// Setting field values
env->SetIntField(previewBitmap, width_id, thumb.width);
env->SetIntField(previewBitmap, height_id, thumb.height);
env->SetLongField(previewBitmap, r_id, (jlong)(thumb.r));
env->SetLongField(previewBitmap, g_id, (jlong)(thumb.g));
env->SetLongField(previewBitmap, b_id, (jlong)(thumb.b));
env->SetObjectField(imageDescription, thumbnail_id, previewBitmap);
DEBUG_INFO
RawProcessor->recycle(); // just for show this call...
// use it if you want to load something else
end:
DEBUG_INFO if (image != NULL) LibRaw::dcraw_clear_mem(image);
DEBUG_INFO if (RawProcessor != NULL) delete RawProcessor;
DEBUG_INFO env->ReleaseStringUTFChars(filename, fn);
DEBUG_INFO if (ret != LIBRAW_SUCCESS)
{
DEBUG_INFO throw_libraw_exception(env, ret);
}
DEBUG_INFO return imageDescription;
}
示例9: execute
//.........这里部分代码省略.........
{
*ptr=0;
c--;
}
}
else //GB row
{
*ptr=0;
}
firstBandDa->nextColumn();
}
if(row%2!=0)
r--;
firstBandDa->nextRow();
}
//band 2 Blue
for(row=0,r=0;row<S.iheight;row++,r++)
{
for(col=0,c=0;col<S.iwidth;col++,c++)
{
if(row%2!=0) //GB row
{
if(col%2!=0) //Blue pixel
{
ptr=reinterpret_cast<unsigned short*>(secondBandDa->getColumn());
*ptr=pData[c+(r*S.iwidth)+(2*S.iheight*S.iwidth)];
}
else
{
*ptr=0;
c--;
}
}
else //RG row
{
*ptr=0;
}
secondBandDa->nextColumn();
}
if(row%2==0)
r--;
secondBandDa->nextRow();
}
//band 1 Green
for(row=0,r=0;row<S.iheight;row++,r++)
{
for(col=0,c=0;col<S.iwidth;col++,c++)
{
if(row%2==0) //RG row
{
if(col%2!=0) //Green pixel
{
ptr=reinterpret_cast<unsigned short*>(thirdBandDa->getColumn());
*ptr=pData[c+(r*S.iwidth)+(1*S.iheight*S.iwidth)]; //g1
}
else
{
*ptr=0;
c--;
}
}
else //GB row
{
if(col%2==0) //Green pixel
{
ptr=reinterpret_cast<unsigned short*>(thirdBandDa->getColumn());
*ptr=pData[c+(r*S.iwidth)+(3*S.iheight*S.iwidth)]; //g2
}
else
{
*ptr=0;
c--;
}
}
thirdBandDa->nextColumn();
}
thirdBandDa->nextRow();
}
if (createView() == NULL)
{
return false;
}
RawProcessor.recycle();
return true;
}
示例10: main
//.........这里部分代码省略.........
if(verbosity) printf("Processing file %s\n",argv[arg]);
timerstart();
#ifndef WIN32
if(use_mmap)
{
int file = open(argv[arg],O_RDONLY);
struct stat st;
if(file<0)
{
fprintf(stderr,"Cannot open %s: %s\n",argv[arg],strerror(errno));
continue;
}
if(fstat(file,&st))
{
fprintf(stderr,"Cannot stat %s: %s\n",argv[arg],strerror(errno));
close(file);
continue;
}
int pgsz = getpagesize();
msize = ((st.st_size+pgsz-1)/pgsz)*pgsz;
iobuffer = mmap(NULL,msize,PROT_READ,MAP_PRIVATE,file,0);
if(!iobuffer)
{
fprintf(stderr,"Cannot mmap %s: %s\n",argv[arg],strerror(errno));
close(file);
continue;
}
close(file);
if( (ret = RawProcessor.open_buffer(iobuffer,st.st_size) != LIBRAW_SUCCESS))
{
fprintf(stderr,"Cannot open_buffer %s: %s\n",argv[arg],libraw_strerror(ret));
continue; // no recycle b/c open file will recycle itself
}
}
else
#endif
if (use_mem)
{
int file = open(argv[arg],O_RDONLY|O_BINARY);
struct stat st;
if(file<0)
{
fprintf(stderr,"Cannot open %s: %s\n",argv[arg],strerror(errno));
continue;
}
if(fstat(file,&st))
{
fprintf(stderr,"Cannot stat %s: %s\n",argv[arg],strerror(errno));
close(file);
continue;
}
if(!(iobuffer = malloc(st.st_size)))
{
fprintf(stderr,"Cannot allocate %d kbytes for memory buffer\n",(int)(st.st_size/1024));
close(file);
continue;
}
int rd;
if(st.st_size!=(rd=read(file,iobuffer,st.st_size)))
{
fprintf(stderr,"Cannot read %d bytes instead of %d to memory buffer\n",(int)rd,(int)st.st_size);
close(file);
free(iobuffer);
示例11: datastream
static FIBITMAP * DLL_CALLCONV
Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
FIBITMAP *dib = NULL;
LibRaw RawProcessor;
BOOL header_only = (flags & FIF_LOAD_NOPIXELS) == FIF_LOAD_NOPIXELS;
try {
// wrap the input datastream
LibRaw_freeimage_datastream datastream(io, handle);
// set decoding parameters
// the following parameters affect data reading
// --------------------------------------------
// (-w) Use camera white balance, if possible (otherwise, fallback to auto_wb)
RawProcessor.imgdata.params.use_camera_wb = 1;
// RAW data filtration mode during data unpacking and postprocessing
RawProcessor.imgdata.params.filtering_mode = LIBRAW_FILTERING_AUTOMATIC;
// (-h) outputs the image in 50% size
RawProcessor.imgdata.params.half_size = ((flags & RAW_HALFSIZE) == RAW_HALFSIZE) ? 1 : 0;
// open the datastream
if(RawProcessor.open_datastream(&datastream) != LIBRAW_SUCCESS) {
throw "LibRaw : failed to open input stream (unknown format)";
}
if(header_only) {
// header only mode
dib = FreeImage_AllocateHeaderT(header_only, FIT_RGB16, RawProcessor.imgdata.sizes.width, RawProcessor.imgdata.sizes.height);
// try to get JPEG embedded Exif metadata
if(dib) {
FIBITMAP *metadata_dib = libraw_LoadEmbeddedPreview(RawProcessor, FIF_LOAD_NOPIXELS);
if(metadata_dib) {
FreeImage_CloneMetadata(dib, metadata_dib);
FreeImage_Unload(metadata_dib);
}
}
}
else if((flags & RAW_PREVIEW) == RAW_PREVIEW) {
// try to get the embedded JPEG
dib = libraw_LoadEmbeddedPreview(RawProcessor, 0);
if(!dib) {
// no JPEG preview: try to load as 8-bit/sample (i.e. RGB 24-bit)
dib = libraw_LoadRawData(RawProcessor, 8);
}
}
else if((flags & RAW_DISPLAY) == RAW_DISPLAY) {
// load raw data as 8-bit/sample (i.e. RGB 24-bit)
dib = libraw_LoadRawData(RawProcessor, 8);
}
else {
// default: load raw data as linear 16-bit/sample (i.e. RGB 48-bit)
dib = libraw_LoadRawData(RawProcessor, 16);
}
// save ICC profile if present
if(NULL != RawProcessor.imgdata.color.profile) {
FreeImage_CreateICCProfile(dib, RawProcessor.imgdata.color.profile, RawProcessor.imgdata.color.profile_length);
}
// try to get JPEG embedded Exif metadata
if(dib && !((flags & RAW_PREVIEW) == RAW_PREVIEW) ) {
FIBITMAP *metadata_dib = libraw_LoadEmbeddedPreview(RawProcessor, FIF_LOAD_NOPIXELS);
if(metadata_dib) {
FreeImage_CloneMetadata(dib, metadata_dib);
FreeImage_Unload(metadata_dib);
}
}
// clean-up internal memory allocations
RawProcessor.recycle();
return dib;
} catch(const char *text) {
if(dib) {
FreeImage_Unload(dib);
}
RawProcessor.recycle();
FreeImage_OutputMessageProc(s_format_id, text);
}
return NULL;
}
示例12: main
int main(int ac, char *av[])
{
int i, ret, output_thumbs=0;
// don't use fixed size buffers in real apps!
LibRaw RawProcessor;
if(ac<2)
{
printf(
"mem_image - LibRaw sample, to illustrate work for memory buffers. Emulates dcraw [-4] [-1] [-e] [-h]\n"
"Usage: %s [-D] [-T] [-v] [-e] raw-files....\n"
"\t-6 - output 16-bit PPM\n"
"\t-4 - linear 16-bit data\n"
"\t-e - extract thumbnails (same as dcraw -e in separate run)\n",
"\t-h - use half_size\n");
return 0;
}
putenv ((char*)"TZ=UTC"); // dcraw compatibility, affects TIFF datestamp field
#define P1 RawProcessor.imgdata.idata
#define S RawProcessor.imgdata.sizes
#define C RawProcessor.imgdata.color
#define T RawProcessor.imgdata.thumbnail
#define P2 RawProcessor.imgdata.other
#define OUT RawProcessor.imgdata.params
for (i=1;i<ac;i++)
{
if(av[i][0]=='-')
{
if(av[i][1]=='6' && av[i][2]==0)
OUT.output_bps = 16;
if(av[i][1]=='4' && av[i][2]==0)
{
OUT.output_bps = 16;
OUT.gamm[0] = OUT.gamm[1] = OUT.no_auto_bright = 1;
}
if(av[i][1]=='e' && av[i][2]==0)
output_thumbs++;
if(av[i][1]=='h' && av[i][2]==0)
OUT.half_size=1;
continue;
}
printf("Processing %s\n",av[i]);
if( (ret = RawProcessor.open_file(av[i])) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot open %s: %s\n",av[i],libraw_strerror(ret));
continue; // no recycle b/c open file will recycle itself
}
if( (ret = RawProcessor.unpack() ) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot unpack %s: %s\n",av[i],libraw_strerror(ret));
continue;
}
// we should call dcraw_process before thumbnail extraction because for
// some cameras (i.e. Kodak ones) white balance for thumbnal should be set
// from main image settings
ret = RawProcessor.dcraw_process();
if(LIBRAW_SUCCESS !=ret)
{
fprintf(stderr,"Cannot do postpocessing on %s: %s\n",
av[i],libraw_strerror(ret));
if(LIBRAW_FATAL_ERROR(ret))
continue;
}
libraw_processed_image_t *image = RawProcessor.dcraw_make_mem_image(&ret);
if(image)
{
write_ppm(image,av[i]);
LibRaw::dcraw_clear_mem(image);
}
else
fprintf(stderr,"Cannot unpack %s to memory buffer: %s\n" , av[i],libraw_strerror(ret));
if(output_thumbs)
{
if( (ret = RawProcessor.unpack_thumb() ) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot unpack_thumb %s: %s\n",av[i],libraw_strerror(ret));
if(LIBRAW_FATAL_ERROR(ret))
continue; // skip to next file
}
else
{
libraw_processed_image_t *thumb = RawProcessor.dcraw_make_mem_thumb(&ret);
if(thumb)
{
write_thumb(thumb,av[i]);
LibRaw::dcraw_clear_mem(thumb);
}
//.........这里部分代码省略.........
示例13: extractRAWData
bool KDcraw::extractRAWData(const QString& filePath, QByteArray& rawData, DcrawInfoContainer& identify, unsigned int shotSelect)
{
QFileInfo fileInfo(filePath);
QString rawFilesExt(rawFiles());
QString ext = fileInfo.suffix().toUpper();
identify.isDecodable = false;
if (!fileInfo.exists() || ext.isEmpty() || !rawFilesExt.toUpper().contains(ext))
return false;
if (m_cancel)
return false;
d->setProgress(0.1);
LibRaw raw;
// Set progress call back function.
raw.set_progress_handler(callbackForLibRaw, d);
int ret = raw.open_file((const char*)(QFile::encodeName(filePath)).constData());
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run open_file: " << libraw_strerror(ret);
raw.recycle();
return false;
}
if (m_cancel)
{
raw.recycle();
return false;
}
d->setProgress(0.3);
raw.imgdata.params.output_bps = 16;
raw.imgdata.params.shot_select = shotSelect;
ret = raw.unpack();
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run unpack: " << libraw_strerror(ret);
raw.recycle();
return false;
}
if (m_cancel)
{
raw.recycle();
return false;
}
d->setProgress(0.4);
ret = raw.raw2image();
if (ret != LIBRAW_SUCCESS)
{
qCDebug(LIBKDCRAW_LOG) << "LibRaw: failed to run raw2image: " << libraw_strerror(ret);
raw.recycle();
return false;
}
if (m_cancel)
{
raw.recycle();
return false;
}
d->setProgress(0.6);
Private::fillIndentifyInfo(&raw, identify);
if (m_cancel)
{
raw.recycle();
return false;
}
d->setProgress(0.8);
rawData = QByteArray();
if (raw.imgdata.idata.filters == 0)
{
rawData.resize((int)(raw.imgdata.sizes.iwidth * raw.imgdata.sizes.iheight * raw.imgdata.idata.colors * sizeof(unsigned short)));
unsigned short* output = reinterpret_cast<unsigned short*>(rawData.data());
for (unsigned int row = 0; row < raw.imgdata.sizes.iheight; row++)
{
for (unsigned int col = 0; col < raw.imgdata.sizes.iwidth; col++)
{
for (int color = 0; color < raw.imgdata.idata.colors; color++)
{
*output = raw.imgdata.image[raw.imgdata.sizes.iwidth*row + col][color];
output++;
}
}
//.........这里部分代码省略.........
示例14: libraw_recycle
void libraw_recycle(libraw_data_t* lr)
{
if(!lr) return;
LibRaw *ip = (LibRaw*) lr->parent_class;
ip->recycle();
}
示例15: main
int main(int ac, char *av[])
{
int i, ret, verbose=0, output_thumbs=0;
// don't use fixed size buffers in real apps!
char outfn[1024],thumbfn[1024];
LibRaw RawProcessor;
if(ac<2)
{
printf(
"simple_dcraw - LibRaw %s sample. Emulates dcraw [-D] [-T] [-v] [-e] [-E]\n"
" %d cameras supported\n"
"Usage: %s [-D] [-T] [-v] [-e] raw-files....\n"
"\t-D - document mode emulation\n"
"\t-4 - 16-bit mode\n"
"\t-v - verbose output\n"
"\t-T - output TIFF files instead of .pgm/ppm\n"
"\t-e - extract thumbnails (same as dcraw -e in separate run)\n",LibRaw::version(),
LibRaw::cameraCount(),
av[0]);
return 0;
}
putenv ((char*)"TZ=UTC"); // dcraw compatibility, affects TIFF datestamp field
#define P1 RawProcessor.imgdata.idata
#define S RawProcessor.imgdata.sizes
#define C RawProcessor.imgdata.color
#define T RawProcessor.imgdata.thumbnail
#define P2 RawProcessor.imgdata.other
#define OUT RawProcessor.imgdata.params
for (i=1;i<ac;i++)
{
if(av[i][0]=='-')
{
if(av[i][1]=='T' && av[i][2]==0)
OUT.output_tiff=1;
if(av[i][1]=='v' && av[i][2]==0)
verbose++;
if(av[i][1]=='e' && av[i][2]==0)
output_thumbs++;
if(av[i][1]=='D' && av[i][2]==0)
OUT.document_mode=2;
if(av[i][1]=='4' && av[i][2]==0)
OUT.output_bps=16;
if(av[i][1]=='C' && av[i][2]==0)
RawProcessor.set_progress_handler(my_progress_callback,NULL);
continue;
}
if(verbose) printf("Processing file %s\n",av[i]);
if( (ret = RawProcessor.open_file(av[i])) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot open_file %s: %s\n",av[i],libraw_strerror(ret));
continue; // no recycle b/c open file will recycle itself
}
if( (ret = RawProcessor.unpack() ) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot unpack %s: %s\n",av[i],libraw_strerror(ret));
continue;
}
// thumbnail unpacking and output in the middle of main
// image processing - for test purposes!
if(output_thumbs)
{
if( (ret = RawProcessor.unpack_thumb() ) != LIBRAW_SUCCESS)
{
fprintf(stderr,"Cannot unpack_thumb %s: %s\n",av[i],libraw_strerror(ret));
if(LIBRAW_FATAL_ERROR(ret))
continue; // skip to next file
}
else
{
snprintf(thumbfn,sizeof(thumbfn),"%s.%s",
av[i],T.tformat == LIBRAW_THUMBNAIL_JPEG ? "thumb.jpg" : "thumb.ppm");
if(verbose) printf("Writing thumbnail file %s\n",thumbfn);
if( LIBRAW_SUCCESS != (ret = RawProcessor.dcraw_thumb_writer(thumbfn)))
{
fprintf(stderr,"Cannot write %s: %s\n",thumbfn,libraw_strerror(ret));
if(LIBRAW_FATAL_ERROR(ret))
continue;
}
}
}
if(OUT.document_mode)
ret = RawProcessor.dcraw_document_mode_processing();
else
ret = RawProcessor.dcraw_process();
if(LIBRAW_SUCCESS !=ret)
{
fprintf(stderr,"Cannot do postpocessing on %s: %s\n",
//.........这里部分代码省略.........