initial check in
This commit is contained in:
213
pnginfo/pnginfo.cpp
Normal file
213
pnginfo/pnginfo.cpp
Normal 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
155
pnginfo/pnginfo.vcxproj
Normal 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>
|
||||
22
pnginfo/pnginfo.vcxproj.filters
Normal file
22
pnginfo/pnginfo.vcxproj.filters
Normal 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>
|
||||
Reference in New Issue
Block a user