initial check in

This commit is contained in:
2012-12-06 21:43:03 +04:00
commit 4bc273824d
179 changed files with 29415 additions and 0 deletions

213
pnginfo/pnginfo.cpp Normal file
View File

@@ -0,0 +1,213 @@
// pnginfo.cpp : Defines the entry point for the console application.
//
#include <exception>
#include <iostream>
#include <boost/format.hpp>
#include <png.h>
#include <pngstruct.h>
static void error_handler(png_structp png_ptr, png_const_charp msg)
{
// if (png_ptr)
// ;
throw std::logic_error( boost::str(boost::format("libpng: %1") % msg).c_str() );
}
static void warning_handler(png_structp png_ptr, png_const_charp msg)
{
// if (png_ptr)
// ;
std::cerr << "Warning: libpng: " << msg << std::endl;
}
void print_info( const std::string& name )
{
png_structp png_ptr = 0;
png_infop info_ptr = 0;
try
{
//
// Open the file.
//
FILE * file = fopen( name.c_str(), "rb");
if ( !file )
throw std::logic_error( "fopen failed." );
//
// First check the eight byte PNG signature.
//
png_byte signature[8];
fread(signature, 1, 8, file);
if (png_sig_cmp(signature, 0, 8))
throw std::logic_error( "Bad signature." );
//
// Create the two png(-info) structures.
//
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
0/*this*/,
(png_error_ptr)error_handler,
(png_error_ptr)warning_handler);
if (!png_ptr)
throw std::logic_error( "png_create_read_struct failed." );
info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr)
throw std::logic_error( "png_create_info_struct failed." );
//
// Initialize the png structure.
//
png_init_io(png_ptr, file);
png_set_sig_bytes(png_ptr, 8);
//
// Read all PNG info up to image data.
//
png_read_info(png_ptr, info_ptr);
//
// Get width, height, bit-depth and color-type.
//
png_uint_32 width;
png_uint_32 height;
int bitDepth;
int colorType;
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bitDepth,
&colorType, NULL, NULL, NULL);
png_size_t rowBytes = png_get_rowbytes(png_ptr, info_ptr);
int channels = png_get_channels(png_ptr, info_ptr);
std::string colorTypeStr;
switch ( colorType )
{
case PNG_COLOR_TYPE_GRAY:
colorTypeStr = "PNG_COLOR_TYPE_GRAY";
break;
case PNG_COLOR_TYPE_GRAY_ALPHA:
colorTypeStr = "PNG_COLOR_TYPE_GRAY_ALPHA";
break;
case PNG_COLOR_TYPE_PALETTE:
colorTypeStr = "PNG_COLOR_TYPE_PALETTE";
break;
case PNG_COLOR_TYPE_RGB:
colorTypeStr = "PNG_COLOR_TYPE_RGB";
break;
case PNG_COLOR_TYPE_RGB_ALPHA:
colorTypeStr = "PNG_COLOR_TYPE_RGB_ALPHA";
break;
default:
colorTypeStr = boost::str( boost::format( "%02x" ) % colorType );
}
std::cout << "Name: " << name << std::endl;
std::cout << "Width: " << width << std::endl;
std::cout << "Height: " << height << std::endl;
std::cout << "Bit Depth: " << bitDepth << std::endl;
std::cout << "Channels: " << channels << std::endl;
std::cout << "Color Type: " << colorTypeStr << std::endl;
#if 0
//
// Expand images of all color-type and bit-depth to 3x8-bit RGB.
// let the library process alpha, transparency, background, etc.
//
if (colorType == PNG_COLOR_TYPE_PALETTE)
png_set_expand(png_ptr);
if (bitDepth < 8)
png_set_expand(png_ptr);
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
png_set_expand(png_ptr);
if (colorType == PNG_COLOR_TYPE_GRAY ||
colorType == PNG_COLOR_TYPE_GRAY_ALPHA)
png_set_gray_to_rgb(png_ptr);
if (colorType == PNG_COLOR_TYPE_RGB_ALPHA ||
colorType == PNG_COLOR_TYPE_GRAY_ALPHA ||
png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) )
png_set_swap_alpha(png_ptr);
else
png_set_filler(png_ptr, ~0, PNG_FILLER_BEFORE);
if (bitDepth == 16)
# ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
png_set_scale_16(png_ptr);
# else
png_set_strip_16(png_ptr);
# endif
//
// Set the background color to draw transparent and alpha images over.
//
png_color_16 * bg16;
if (png_get_bKGD(png_ptr, info_ptr, &bg16))
png_set_background(png_ptr, bg16, PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
//
// If required set gamma conversion.
//
double dGamma;
if (png_get_gAMA(png_ptr, info_ptr, &dGamma))
png_set_gamma(png_ptr, (double) 2.2, dGamma);
//
// After the transformations are registered, update info_ptr data.
//
png_read_update_info(png_ptr, info_ptr);
//
// Get again width, height and the new bit-depth and color-type.
//
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bitDepth, &colorType, 0, 0, 0);
//
// Row_bytes is the width x number of channels.
//
if ( rowBytes != channels * width * bitDepth / 8 )
throw std::logic_error( "row bytes is not equal to channels*width*bitDepth/8" );
//
// Check if the image can store data.
//
if ( I::bit_depth != bitDepth )
throw std::logic_error( "bit depth don't match." );
if ( I::channels != channels )
throw std::logic_error( "channels don't match." );
//
// Now we can allocate memory to store the image.
//
image.resize( width, height );
//
// Read data raw by raw.
//
for (png_uint_32 i = 0; i < height; i++)
png_read_row( png_ptr, (png_bytep)image.getData( 0, i ), 0 );
//
// Read the additional chunks in the PNG file (not really needed).
//
png_read_end(png_ptr, 0);
#endif
//
// Destroy reader and info.
//
png_destroy_read_struct( &png_ptr, &info_ptr, 0 );
png_ptr = 0;
info_ptr = 0;
}
catch ( ... )
{
if ( png_ptr )
png_destroy_read_struct( &png_ptr, &info_ptr, 0 );
throw;
}}
int main(int argc, char * argv[])
{try{
if ( argc != 2 )
{
std::cerr << "Usage: " << argv[0] << " <png file name>" << std::endl;
return 3;
}
print_info(argv[1]);
return 0;
}
catch ( const std::exception& e )
{
std::cerr << "Error: " << e.what() << std::endl;
return 2;
}
catch (...)
{
std::cerr << "Error: unknown." << std::endl;
return 1;
}}

155
pnginfo/pnginfo.vcxproj Normal file
View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{248F64F5-D206-4134-A85A-7C919EE88B50}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>pnginfo</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;C:\Users\Vahagnk\src\boost_1_48_0;C:\Users\Vahagnk\src\gtest-1.6.0\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);libpngd.lib;zlibd.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;%(AdditionalLibraryDirectories);C:\Users\Vahagnk\src\gtest-1.6.0</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions); _CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;C:\Users\Vahagnk\src\boost_1_48_0;C:\Users\Vahagnk\src\gtest-1.6.0\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);libpngd.lib;zlibd.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;%(AdditionalLibraryDirectories);C:\Users\Vahagnk\src\gtest-1.6.0</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;C:\Users\Vahagnk\src\boost_1_48_0;C:\Users\Vahagnk\src\gtest-1.6.0\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);libpng.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;%(AdditionalLibraryDirectories);C:\Users\Vahagnk\src\gtest-1.6.0</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions); _CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
<AdditionalIncludeDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;C:\Users\Vahagnk\src\boost_1_48_0;C:\Users\Vahagnk\src\gtest-1.6.0\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies);libpng.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Users\Vahagnk\src\libpng-1.5.10;C:\Users\Vahagnk\src\zlib-1.2.6;%(AdditionalLibraryDirectories);C:\Users\Vahagnk\src\gtest-1.6.0</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="pnginfo.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="pnginfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>