如何检查图像压缩 [英] How to check the image compression
本文介绍了如何检查图像压缩的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好
有什么方法可以检查下载的图像(.TIFF,.PNG,.JPEG等)是否已压缩?
目前,我正在使用OpenCV,但我不在乎如何检索此信息.
如果我通过普通的Windows资源管理器->右键单击->属性->详细信息->打开一些图像,我们都可以看到压缩"字段
Thnx
Hello guys
Is there any way to check if downloaded image(.TIFF,.PNG,.JPEG and others) has compression or not ?
Currently I''m using OpenCV, but I don''t care how to retrieve this info.
If I open some image via ordinary Windows Explorer->Right button click->Properties->Details->and we all can see a "compression" field
Thnx
推荐答案
要检索压缩"字段,例如Windows资源管理器->右键单击->属性->详细信息
您必须使用GdiPlus库:
1.创建Image类对象( http://msdn. microsoft.com/en-us/library/windows/desktop/ms534462(v=vs.85).aspx [ http://msdn.microsoft.com/en-us/library/windows/desktop/ms535390(v = vs.85).aspx [
To retrieve "compression" field like Windows Explorer->Right button click->Properties->Details
You have to use GdiPlus library:
1. Create Image class object (http://msdn.microsoft.com/en-us/library/windows/desktop/ms534462(v=vs.85).aspx[^])
2. Get compression method (PropertyTagCompression) from image metadata calling Image.GetPropertyItem method (http://msdn.microsoft.com/en-us/library/windows/desktop/ms535390(v=vs.85).aspx[^])
3. Compare returned value with possible discrete values for PKEY_Image_Compression (IMAGE_COMPRESSION_*) declared in propkey.h
Code example:
#include <windows.h>
#include <gdiplus.h>
#include <propkey.h>
using namespace Gdiplus;
BOOL GetCompressionMethod(
PWSTR pwszImage,
PUSHORT pusCompresssionMethod)
{
GdiplusStartupInput StartupInput;
ULONG_PTR Token;
Image *pImage;
UINT uiSize;
PropertyItem *pItem;
Status Result;
GdiplusStartup(&Token, &StartupInput, NULL);
pImage = new Image(pwszImage);
if (pImage == NULL)
{
GdiplusShutdown(Token);
return FALSE;
}
uiSize = pImage->GetPropertyItemSize(
PropertyTagCompression);
if (uiSize == 0)
{
delete pImage;
GdiplusShutdown(Token);
return FALSE;
}
pItem = (PropertyItem *) new BYTE [uiSize];
if (pItem == NULL)
{
delete pImage;
GdiplusShutdown(Token);
return FALSE;
}
Result = pImage->GetPropertyItem(
PropertyTagCompression, uiSize, pItem);
if (Result != Ok)
{
delete [] ((PBYTE) pItem);
delete pImage;
GdiplusShutdown(Token);
return FALSE;
}
*pusCompresssionMethod = *(PUSHORT) pItem->value;
switch (*(PUSHORT) pItem->value)
{
case IMAGE_COMPRESSION_UNCOMPRESSED:
// YourCode
break;
case IMAGE_COMPRESSION_CCITT_T3:
// YourCode
break;
case IMAGE_COMPRESSION_CCITT_T4:
// YourCode
break;
case IMAGE_COMPRESSION_CCITT_T6:
// YourCode
break;
case IMAGE_COMPRESSION_LZW:
// YourCode
break;
case IMAGE_COMPRESSION_JPEG:
// YourCode
break;
case IMAGE_COMPRESSION_PACKBITS:
// YourCode
break;
}
delete [] ((PBYTE) pItem);
delete pImage;
GdiplusShutdown(Token);
return TRUE;
}
这篇关于如何检查图像压缩的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文