⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exifinfo.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				case 0:
					ei.info="自动";
					break;

				case 1:
					ei.info="白炽灯";
					break;

				case 2:
					ei.info="荧光灯";
					break;

				case 3:
					ei.info="钨丝灯";
					break;

				case 17:
					ei.info="标准光照A";
					break;

				case 18:
					ei.info="标准光照B";
					break;

				case 19:
					ei.info="标准光照C";
					break;

				case 20:
					ei.info="D55";
					break;

				case 21:
					ei.info="D65";
					break;

				case 22:
					ei.info="D75";
					break;

				case 255:
					ei.info="其它类型";
					break;

				default:
					ei.info="保留";
					break;
			}
			break;

		case 0x9209:
			ei.tag="PropertyTagExifFlash";
			ei.name="闪光灯状态";
			if(0==(value&0x0001)) ei.info="没开闪光灯 ";
			else ei.info="打开闪光灯 ";
			if(0==((value>>1)&0x0003)) ei.info+="无光阑返回检测";
			else if(2==((value>>1)&0x0003)) ei.info+="光阑返回未检测";
			else if(3==((value>>1)&0x0003)) ei.info+="光阑返回已检测";
			else ei.info+="保留";
			break;

		case 0xA001:
			ei.tag="PropertyTagExifColorSpace";
			ei.name="颜色空间";
			if(1==value) ei.info="sRGB";
			else if(0xFFFF==value) ei.info="未校准";
			else ei.info="保留";
			break;

		case 0xA002:
			ei.tag="PropertyTagExifPixXDim";
			ei.name="拍摄宽度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0xA003:
			ei.tag="PropertyTagExifPixYDim";
			ei.name="拍摄高度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0xA210:
			ei.tag="PropertyTagExifFocalResUnit";
			ei.name="焦点分辨率单位";
			if(2==value) ei.info="英寸";
			else if(3==value) ei.info="厘米";
			break;

		case 0xA217:
			ei.tag="PropertyTagExifSensingMethod";
			ei.name="传感器类型";
			switch(value)
			{
				case 1:
					ei.info="未知传感器";
					break;

				case 2:
					ei.info="单芯片彩色区域传感器";
					break;

				case 3:
					ei.info="双芯片彩色区域传感器";
					break;

				case 4:
					ei.info="三芯片彩色区域传感器";
					break;

				case 5:
					ei.info="彩色连续区域传感器";
					break;

				case 7:
					ei.info="三线性传感器";
					break;

				case 8:
					ei.info="彩色连续线性传感器";
					break;

				default:
					ei.info="保留";
					break;
			}
			break;
		
		default:
			break;
	}
	m_ExifProp[ei.tag]=ei;
}

void CExifInfo::ProcessType4(PropertyItem* pPropItems,UINT i)
{
	ExifInfo ei;
	ULONG value;
	TCHAR info[80];
		
	ei.tag=ei.name=ei.info="";
	value=*(ULONG*)(LPBYTE)pPropItems[i].value;
	switch(pPropItems[i].id)
	{
		case 0x0201:
			ei.tag="PropertyTagJPEGInterFormat";
			ei.name="JPEG 数据位置";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0x0202:
			ei.tag="PropertyTagJPEGInterLength";
			ei.name="JPEG 数据长度";
			sprintf(info,"%d 字节",value);
			ei.info=info;
			break;

		case 0x5008:
			ei.tag="PropertyTagPrintFlagsBleedWidth";
			ei.name="出血打印宽度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0x5012:
			ei.tag="PropertyTagThumbnailFormat";
			ei.name="缩略图格式";
			if(0==value) ei.info="原生 RGB 格式";
			else if(1==value) ei.info="JPEG 格式";
			break;

		case 0x5013:
			ei.tag="PropertyTagThumbnailWidth";
			ei.name="缩略图宽度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0x5014:
			ei.tag="PropertyTagThumbnailHeight";
			ei.name="缩略图高度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0x5017:
			ei.tag="PropertyTagThumbnailRawBytes";
			ei.name="缩略图行程长度";
			sprintf(info,"%d 字节",value);
			ei.info=info;
			break;

		case 0x5018:
			ei.tag="PropertyTagThumbnailSize";
			ei.name="缩略图大小";
			sprintf(info,"%d 字节",value);
			ei.info=info;
			break;

		case 0x5019:
			ei.tag="PropertyTagThumbnailCompressedSize";
			ei.name="缩略图压缩后大小";
			sprintf(info,"%d 字节",value);
			ei.info=info;
			break;

		case 0xA002:
			ei.tag="PropertyTagExifPixXDim";
			ei.name="拍摄宽度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0xA003:
			ei.tag="PropertyTagExifPixYDim";
			ei.name="拍摄高度";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		case 0xA005:
			ei.tag="PropertyTagExifInterop";
			ei.name="辅助信息位置";
			sprintf(info,"%d",value);
			ei.info=info;
			break;

		default:
			break;
	}
	m_ExifProp[ei.tag]=ei;
}

void CExifInfo::ProcessType5(PropertyItem* pPropItems,UINT i)
{
	ExifInfo ei;
	TCHAR info[80];
	ULONG numerator,denominator;
		
	ei.tag=ei.name=ei.info="";
	numerator=*(UINT*)((LPBYTE)pPropItems[i].value);
	denominator=*(UINT*)((LPBYTE)pPropItems[i].value+4);
	switch(pPropItems[i].id)
	{
		case 0x011A:
			ei.tag="PropertyTagXResolution";
			ei.name="水平分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0x011B:
			ei.tag="PropertyTagYResolution";
			ei.name="垂直分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0x500A:
			ei.tag="PropertyTagHalftoneLPI";
			ei.name="墨水屏幕频率";
			sprintf(info,"%.2f",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x500C:
			ei.tag="PropertyTagHalftoneDegree";
			ei.name="屏幕角度";
			sprintf(info,"%.2f",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x502D:
			ei.tag="PropertyTagThumbnailResolutionX";
			ei.name="缩略图水平分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0x502E:
			ei.tag="PropertyTagThumbnailResolutionY";
			ei.name="缩略图垂直分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0x829A:
			ei.tag="PropertyTagExifExposureTime";
			ei.name="曝光时间";
			if(0==denominator%numerator) sprintf(info,"%d/%d 秒",1,denominator/numerator);
			else sprintf(info,"%.2f 秒",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x829D:
			ei.tag="PropertyTagExifFNumber";
			ei.name="光圈尺寸";
			sprintf(info,"F%.2f",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9102:
			ei.tag="PropertyTagExifCompBPP";
			ei.name="压缩数据发色数";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0x9202:
			ei.tag="PropertyTagExifAperture";
			ei.name="镜头孔径";
			sprintf(info,"%.2f 毫米",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9204:
			ei.tag="PropertyTagExifExposureBias";
			ei.name="曝光补偿";
			sprintf(info,"%.2f EV",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9205:
			ei.tag="PropertyTagExifMaxAperture";
			ei.name="最小光圈尺寸";
			sprintf(info,"F%.2f",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x920A:
			ei.tag="PropertyTagExifFocalLength";
			ei.name="焦距长度";
			sprintf(info,"%.2f 毫米",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0xA20E:
			ei.tag="PropertyTagExifFocalXRes";
			ei.name="焦点宽度分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0xA20F:
			ei.tag="PropertyTagExifFocalYRes";
			ei.name="焦点高度分辨率";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;

		case 0xA215:
			ei.tag="PropertyTagExifExposureIndex";
			ei.name="曝光索引";
			sprintf(info,"%d",numerator/denominator);
			ei.info=info;
			break;
		
		default:
			break;
	}
	m_ExifProp[ei.tag]=ei;
}

void CExifInfo::ProcessType7(PropertyItem* pPropItems,UINT i)
{
	UINT j;
	ExifInfo ei;
	TCHAR info[80];
		
	ei.tag=ei.name=ei.info="";
	switch(pPropItems[i].id)
	{
		case 0x5010:
			ei.tag="PropertyTagJPEGQuality";
			ei.name="JPEG 品质";
			ei.info=ProcessBinData((LPBYTE)pPropItems[i].value,pPropItems[i].length);
			break;

		case 0x5011:
			ei.tag="PropertyTagGridSize";
			ei.name="网格信息";
			ei.info=ProcessBinData((LPBYTE)pPropItems[i].value,pPropItems[i].length);
			break;

		case 0x501A:
			ei.tag="PropertyTagColorTransferFunction";
			ei.name="色彩变换表";
			ei.info=ProcessBinData((LPBYTE)pPropItems[i].value,pPropItems[i].length);
			break;

		case 0x9000: 
			ei.tag="PropertyTagExifVer";
			ei.name="Exif 版本";
			*((LPTSTR)pPropItems[i].value+pPropItems[i].length)='\0';
			sprintf(info,"%s",(LPTSTR)pPropItems[i].value);
			ei.info=info;
			break;

		case 0x9101:
			ei.tag="PropertyTagExifCompConfig";
			ei.name="压缩配置";
			for(j=0;j<pPropItems[i].length;++j)
				*((LPTSTR)pPropItems[i].value+j)+='0';
			*((LPTSTR)pPropItems[i].value+pPropItems[i].length)='\0';
			if(0==StrCmp((LPTSTR)pPropItems[i].value,"1230")) sprintf(info,"%s","RGB");
			else if(0==StrCmp((LPTSTR)pPropItems[i].value,"4560")) sprintf(info,"%s","YCbCr");
			ei.info=info;
			break;

		case 0x927C:
			ei.tag="PropertyTagExifMakerNote";
			ei.name="记录标识";
			ei.info=ProcessBinData((LPBYTE)pPropItems[i].value,pPropItems[i].length);
			break;

		case 0x9286:
			ei.tag="PropertyTagExifUserComment";
			ei.name="注释标识";
			ei.info=ProcessBinData((LPBYTE)pPropItems[i].value,pPropItems[i].length);
			break;

		case 0xA000:
			ei.tag="PropertyTagExifFPXVer";
			ei.name="FlashPix 版本";
			*((LPTSTR)pPropItems[i].value+pPropItems[i].length)='\0';
			if(0==StrCmp((LPTSTR)pPropItems[i].value,"0100")) sprintf(info,"%s","1.0");
			else sprintf(info,"%s","保留");
			ei.info=info;
			break;

		case 0xA300:
			ei.tag="PropertyTagExifFileSource";
			ei.name="照片来源";
			if(3==*(LPBYTE)pPropItems[i].value) sprintf(info,"%s","数码相机");
			else sprintf(info,"%s","其它");
			ei.info=info;
			break;

		case 0xA301:
			ei.tag="PropertyTagExifSceneType";
			ei.name="场景类型";
			sprintf(info,"%d",*(LPBYTE)pPropItems[i].value);
			ei.info=info;
			break;

		case 0xA302:
			ei.tag="PropertyTagExifCfaPattern";
			ei.name="CFA 模式";
			sprintf(info,"%s","用于单芯片彩色区域传感器");
			ei.info=info;
			break;

		default:
			break;
	}
	m_ExifProp[ei.tag]=ei;
}

void CExifInfo::ProcessType9(PropertyItem* pPropItems,UINT i)
{
	ExifInfo ei;
	LONG value;
		
	ei.tag=ei.name=ei.info="";
	value=*(LPLONG)(LPBYTE)pPropItems[i].value;
}

void CExifInfo::ProcessType10(PropertyItem* pPropItems,UINT i)
{
	ExifInfo ei;
	TCHAR info[80];
	LONG numerator,denominator;
		
	ei.tag=ei.name=ei.info="";
	numerator=*(LPLONG)((LPBYTE)pPropItems[i].value);
	denominator=*(LPLONG)((LPBYTE)pPropItems[i].value+4);
	switch(pPropItems[i].id)
	{
		case 0x9201:
			ei.tag="PropertyTagExifShutterSpeed";
			ei.name="快门速度";
			sprintf(info,"%.2f 秒",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9202:
			ei.tag="PropertyTagExifAperture";
			ei.name="镜头孔径";
			sprintf(info,"%.2f 毫米",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9203:
			ei.tag="PropertyTagExifBrightness";
			ei.name="亮度值";
			sprintf(info,"%.2f",1.0f*numerator/denominator);
			ei.info=info;
			break;

		case 0x9204:
			ei.tag="PropertyTagExifExposureBias";
			ei.name="曝光补偿";
			sprintf(info,"%.2f EV",1.0f*numerator/denominator);
			ei.info=info;
			break;

		default:
			break;
	}
	m_ExifProp[ei.tag]=ei;
}

CString CExifInfo::ProcessBinData(LPBYTE pBinData,UINT length)
{
	CString info;
	TCHAR tip[5];
	UINT i;

	for(i=0;i<min(length,10);++i)
	{
		sprintf(tip,"%02X ",pBinData[i]);
		info+=tip;
	}
	if(length>10) info+="...";

	return(info);
}

BOOL CExifInfo::GetNameAndInfoByTag(CString tag,ExifInfo& ei)
{
	ei.tag=ei.name=ei.info="";
	ei=m_ExifProp[tag];

	if(tag==ei.tag) return(1);
	else return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -