1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Initial checkin

This commit is contained in:
Brian Fiete 2019-08-23 11:56:54 -07:00
parent c74712dad9
commit 078564ac9e
3242 changed files with 1616395 additions and 0 deletions

View file

@ -0,0 +1,231 @@
#include "BeefySysLib/Common.h"
#include "BeefySysLib/util/Array.h"
#include "BeefySysLib/img/PSDReader.h"
#include "BeefySysLib/img/PNGData.h"
USING_NS_BF;
void Resize(ImageData* srcImage, int srcX, int srcY, int srcScale, ImageData* destImage, int destX, int destY, int scale)
{
if (srcScale > scale)
{
struct Color
{
uint8 mElems[4];
};
struct ColorT
{
float mElems[4];
};
ColorT colorT = { 0 };
int sampleScale = srcScale / scale;
float totalDiv = 0;
for (int srcYOfs = 0; srcYOfs < sampleScale; srcYOfs++)
{
for (int srcXOfs = 0; srcXOfs < sampleScale; srcXOfs++)
{
auto color = *(Color*)&srcImage->mBits[(srcX - srcImage->mX + srcXOfs) + (srcY - srcImage->mY + srcYOfs)*srcImage->mWidth];
totalDiv += 1.0f;
float alpha = color.mElems[3];
colorT.mElems[0] += color.mElems[0] * alpha;
colorT.mElems[1] += color.mElems[1] * alpha;
colorT.mElems[2] += color.mElems[2] * alpha;
colorT.mElems[3] += alpha;
}
}
Color outColor;
float alpha = colorT.mElems[3] / totalDiv;
float valScale = 0;
if (alpha > 0)
valScale = 1 / alpha / totalDiv;
outColor.mElems[0] = (int)round(colorT.mElems[0] * valScale);
outColor.mElems[1] = (int)round(colorT.mElems[1] * valScale);
outColor.mElems[2] = (int)round(colorT.mElems[2] * valScale);
outColor.mElems[3] = (int)round(alpha);
destImage->mBits[destX + destY * destImage->mWidth] = *(uint32*)&outColor;
}
else
{
uint32 color = srcImage->mBits[(srcX - srcImage->mX) + (srcY - srcImage->mY)*srcImage->mWidth];
destImage->mBits[destX + destY * destImage->mWidth] = color;
}
}
void ConvImage(const StringImpl& baseName, int wantSize)
{
PNGData srcImage;
bool success = srcImage.LoadFromFile(baseName + "_4.png");
BF_ASSERT(success);
int srcScale = 4;
int destScale = 1 << wantSize;
PNGData destImage;
destImage.CreateNew(srcImage.mWidth * destScale / srcScale, srcImage.mHeight * destScale / srcScale);
for (int destY = 0; destY < destImage.mHeight; destY++)
{
for (int destX = 0; destX < destImage.mWidth; destX++)
{
Resize(&srcImage, destX * srcScale / destScale, destY * srcScale / destScale, srcScale, &destImage, destX, destY, destScale);
}
}
String destName;
if (wantSize == 0)
destName = baseName + ".png";
else
destName = baseName + StrFormat("_%d.png", destScale);
success = destImage.WriteToFile(destName);
BF_ASSERT(success);
}
int main()
{
int baseWidth = 0;
int baseHeight = 0;
PSDReader readers[3];
ImageData* imageDatas[3];
for (int size = 0; size < 3; size++)
{
auto& reader = readers[size];
auto& imageData = imageDatas[size];
String fileName;
if (size == 0)
fileName = "DarkUI.psd";
else if (size == 1)
fileName = "DarkUI_2.psd" ;
else
fileName = "DarkUI_4.psd";
if (!reader.Init(fileName))
{
if (size == 0)
{
printf("Failed to open %s - incorrect working directory?", fileName.c_str());
return 1;
}
imageData = NULL;
continue;
}
if (size == 0)
{
baseWidth = reader.mWidth;
baseHeight = reader.mHeight;
}
std::vector<int> layerIndices;
for (int layerIdx = 0; layerIdx < (int)reader.mPSDLayerInfoVector.size(); layerIdx++)
{
auto layer = reader.mPSDLayerInfoVector[layerIdx];
if (layer->mVisible)
layerIndices.insert(layerIndices.begin(), layerIdx);
}
imageData = reader.MergeLayers(NULL, layerIndices, NULL);
}
int numCols = baseWidth / 20;
int numRows = baseHeight / 20;
auto _HasImage = [&](int col, int row, int size)
{
int scale = 1 << size;
auto srcImage = imageDatas[size];
if (srcImage == NULL)
return false;
for (int yOfs = 0; yOfs < 20 * scale; yOfs++)
{
for (int xOfs = 0; xOfs < 20 * scale; xOfs++)
{
int srcX = (col * 20 * scale) + xOfs;
int srcY = (row * 20 * scale) + yOfs;
auto color = srcImage->mBits[(srcX - srcImage->mX) + (srcY - srcImage->mY)*srcImage->mWidth];
if (color != 0)
return true;
}
}
return false;
};
for (int size = 0; size < 3; size++)
{
int scale = 1 << size;
int outWidth = baseWidth * scale;
int outHeight = baseHeight * scale;
PNGData pngData;
pngData.CreateNew(outWidth, outHeight);
if (size < 2)
{
ConvImage("IconError", size);
ConvImage("IconWarning", size);
}
String fileName;
if (size == 0)
fileName = "DarkUI.png";
else if (size == 1)
fileName = "DarkUI_2.png";
else
fileName = "DarkUI_4.png";
for (int col = 0; col < numCols; col++)
{
for (int row = 0; row < numRows; row++)
{
if ((size == 2) && (col == 11) && (row == 7))
{
NOP;
}
int srcSize = size;
if (!_HasImage(col, row, size))
{
if (_HasImage(col, row, 2))
{
srcSize = 2;
}
else
srcSize = 0;
}
int srcScale = 1 << srcSize;
for (int yOfs = 0; yOfs < 20 * scale; yOfs++)
{
for (int xOfs = 0; xOfs < 20 * scale; xOfs++)
{
int destX = (col * 20 * scale) + xOfs;
int destY = (row * 20 * scale) + yOfs;
int srcX = (col * 20 * srcScale) + xOfs * srcScale / scale;
int srcY = (row * 20 * srcScale) + yOfs * srcScale / scale;
auto srcImage = imageDatas[srcSize];
if ((srcX >= srcImage->mX) && (srcY >= srcImage->mY) &&
(srcX < srcImage->mX + srcImage->mWidth) &&
(srcY < srcImage->mY + srcImage->mHeight))
{
Resize(srcImage, srcX, srcY, srcScale, &pngData, destX, destY, scale);
}
}
}
}
}
bool success = pngData.WriteToFile(fileName);
BF_ASSERT(success);
}
}

View file

@ -0,0 +1,41 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.168
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImgCreate", "ImgCreate.vcxproj", "{89F98CA4-5AB9-49BD-BC95-417388BBEB59}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BeefySysLib_static", "..\..\BeefySysLib\BeefySysLib_static.vcxproj", "{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Debug|x64.ActiveCfg = Debug|x64
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Debug|x64.Build.0 = Debug|x64
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Debug|x86.ActiveCfg = Debug|Win32
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Debug|x86.Build.0 = Debug|Win32
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Release|x64.ActiveCfg = Release|x64
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Release|x64.Build.0 = Release|x64
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Release|x86.ActiveCfg = Release|Win32
{89F98CA4-5AB9-49BD-BC95-417388BBEB59}.Release|x86.Build.0 = Release|Win32
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Debug|x64.ActiveCfg = Debug|x64
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Debug|x64.Build.0 = Debug|x64
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Debug|x86.ActiveCfg = Debug|Win32
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Debug|x86.Build.0 = Debug|Win32
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Release|x64.ActiveCfg = Release|x64
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Release|x64.Build.0 = Release|x64
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Release|x86.ActiveCfg = Release|Win32
{ECEAB68D-2F15-495F-A29C-5EA9548AA23D}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {EB0764C5-FAAE-4A84-B63B-D0FFC7BA08CA}
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.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="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{89F98CA4-5AB9-49BD-BC95-417388BBEB59}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ImgCreate</RootNamespace>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</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 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 Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<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|x64'">
<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>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>../../;../../BeefySysLib/platform/win;../../BeefySysLib/third_party</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeaderFile>
</PrecompiledHeaderFile>
<AdditionalIncludeDirectories>../../;../../BeefySysLib/platform/win;../../BeefySysLib/third_party</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ImgCreate.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\BeefySysLib\BeefySysLib_static.vcxproj">
<Project>{eceab68d-2f15-495f-a29c-5ea9548aa23d}</Project>
</ProjectReference>
</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;hh;hpp;hxx;hm;inl;inc;ipp;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="ImgCreate.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>