// ==========================================================// FreeImage 3 Test Script//// Design and implementation by// - Herv Drolon (drolon@infonie.fr)//// This file is part of FreeImage 3//// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER// THIS DISCLAIMER.//// Use at your own risk!// ==========================================================#include "TestSuite.h"// Local test functions// ----------------------------------------------------------void testSupportsNoPixels() {for (int i = 0; i < FreeImage_GetFIFCount(); i++) {FREE_IMAGE_FORMAT fmt = (FREE_IMAGE_FORMAT)i;if (!FreeImage_FIFSupportsNoPixels(fmt)) {// 'header only' loading mode is not supportedcontinue;}printf("testSupportsNoPixels (%s) ...\n", FreeImage_GetFormatFromFIF(fmt));}}/**Test header only bitmap allocation*/BOOL testHeader(const char *lpszPathName) {int flags = FIF_LOAD_NOPIXELS;FIBITMAP *dib1 = NULL, *dib2 = NULL;try {FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(lpszPathName);dib1 = FreeImage_Load(fif, lpszPathName, flags);if(!dib1) throw(1);dib2 = FreeImage_Clone(dib1);if(!dib2) throw(1);FreeImage_Unload(dib1);FreeImage_Unload(dib2);return TRUE;}catch(int) {if(dib1) FreeImage_Unload(dib1);if(dib2) FreeImage_Unload(dib2);}return FALSE;}/**Parse metadata attached to a dib*/static void ParseMetadata(FIBITMAP *dib, FREE_IMAGE_MDMODEL model) {FITAG *tag = NULL;FIMETADATA *mdhandle = NULL;mdhandle = FreeImage_FindFirstMetadata(model, dib, &tag);if(mdhandle) {do {// get the tag keyconst char *key = FreeImage_GetTagKey(tag);// convert the tag value to a stringconst char *value = FreeImage_TagToString(model, tag);// print the tag// note that most tags do not have a description,// especially when the metadata specifications are not availableif(FreeImage_GetTagDescription(tag)) {//cout << FreeImage_GetTagKey(tag) << "=" << value << " - " << FreeImage_GetTagDescription(tag) << "\n";} else {//cout << FreeImage_GetTagKey(tag) << "=" << value << " - " << "\n";}} while(FreeImage_FindNextMetadata(mdhandle, &tag));}FreeImage_FindCloseMetadata(mdhandle);}/**Load the header of a bitmap (without pixel data)*/BOOL testHeaderData(const char *lpszPathName) {int flags = FIF_LOAD_NOPIXELS;FIBITMAP *dib = NULL;try {// load a file using the FIF_LOAD_NOPIXELS flagFREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(lpszPathName);assert(FreeImage_FIFSupportsNoPixels(fif) == TRUE);dib = FreeImage_Load(fif, lpszPathName, flags);if(!dib) throw(1);// check that dib does not contains pixelsBOOL bHasPixel = FreeImage_HasPixels(dib);assert(bHasPixel == FALSE);// use accessorsFREE_IMAGE_TYPE type = FreeImage_GetImageType(dib);unsigned width = FreeImage_GetWidth(dib);unsigned height = FreeImage_GetHeight(dib);unsigned bpp = FreeImage_GetBPP(dib);// parse some metadata (see e.g. FreeImage_FindFirstMetadata)ParseMetadata(dib, FIMD_COMMENTS);ParseMetadata(dib, FIMD_EXIF_MAIN);ParseMetadata(dib, FIMD_EXIF_EXIF);ParseMetadata(dib, FIMD_EXIF_GPS);ParseMetadata(dib, FIMD_EXIF_MAKERNOTE);ParseMetadata(dib, FIMD_IPTC);ParseMetadata(dib, FIMD_XMP);// you cannot access pixelsBYTE *bits = FreeImage_GetBits(dib);assert(bits == NULL);FreeImage_Unload(dib);return TRUE;}catch(int) {if(dib) FreeImage_Unload(dib);}return FALSE;}/**Test loading and saving of Exif raw data*/static BOOLtestExifRawFile(const char *lpszPathName, int load_flags, int save_flags) {const char *lpszDstPathName = "raw_exif.jpg";FIBITMAP *dib = NULL, *dst = NULL;try {// load an Exif file (jpeg file)FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(lpszPathName);dib = FreeImage_Load(fif, lpszPathName, load_flags);if(!dib) throw(1);// check access to raw Exif dataFITAG *tag = NULL;BOOL bResult = FreeImage_GetMetadata(FIMD_EXIF_RAW, dib, "ExifRaw", &tag);if(tag) {const char *key = FreeImage_GetTagKey(tag);WORD id = FreeImage_GetTagID(tag);FREE_IMAGE_MDTYPE type = FreeImage_GetTagType(tag);DWORD count = FreeImage_GetTagCount(tag);DWORD length = FreeImage_GetTagLength(tag);BYTE *value = (BYTE*)FreeImage_GetTagValue(tag);// save as jpeg : Exif data should be preservedFreeImage_Save(fif, dib, lpszDstPathName, save_flags);// load and check Exif raw datafif = FreeImage_GetFileType(lpszDstPathName);dst = FreeImage_Load(fif, lpszDstPathName, load_flags);if(!dst) throw(1);FITAG *dst_tag = NULL;BOOL bResult = FreeImage_GetMetadata(FIMD_EXIF_RAW, dib, "ExifRaw", &dst_tag);if(dst_tag) {const char *key = FreeImage_GetTagKey(dst_tag);WORD dst_id = FreeImage_GetTagID(dst_tag);FREE_IMAGE_MDTYPE dst_type = FreeImage_GetTagType(dst_tag);DWORD dst_count = FreeImage_GetTagCount(dst_tag);DWORD dst_length = FreeImage_GetTagLength(dst_tag);BYTE *dst_value = (BYTE*)FreeImage_GetTagValue(dst_tag);assert(length == dst_length);}FreeImage_Unload(dst);}FreeImage_Unload(dib);return TRUE;}catch(int) {if(dib) FreeImage_Unload(dib);}return FALSE;}// Main test functions// ----------------------------------------------------------void testHeaderOnly() {const char *src_file_jpg = "exif.jpg";const char *src_file_png = "sample.png";BOOL bResult = TRUE;printf("testHeaderOnly ...\n");testSupportsNoPixels();// JPEG pluginbResult = testHeader(src_file_jpg);assert(bResult);bResult = testHeaderData(src_file_jpg);assert(bResult);// PNG pluginbResult = testHeader(src_file_png);assert(bResult);bResult = testHeaderData(src_file_png);assert(bResult);// you cannot save 'header only' FIBITMAPbResult = testExifRawFile(src_file_jpg, FIF_LOAD_NOPIXELS, 0);assert(bResult == FALSE);}void testExifRaw() {const char *src_file_jpg = "exif.jpg";BOOL bResult = TRUE;printf("testExifRaw ...\n");// Exif raw metadata loading & saving// check Exif raw metadata loading & savingbResult = testExifRawFile(src_file_jpg, 0, 0);assert(bResult);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。