Skip to content

Commit

Permalink
Added crunch compression + options, other minor changes
Browse files Browse the repository at this point in the history
  • Loading branch information
N00MKRAD committed Jul 21, 2020
1 parent 051c15d commit f90328f
Show file tree
Hide file tree
Showing 23 changed files with 736 additions and 360 deletions.
Binary file modified .vs/MagickUtils/v16/.suo
Binary file not shown.
83 changes: 19 additions & 64 deletions ConvertUtilsUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,6 @@ namespace MagickUtils
{
class ConvertUtilsUI
{
public static void ConvertChooser (string ext)
{
Console.Write("\nAvailable commands:\n");
Console.Write("1 Convert to JPEG\n2 Convert to PNG\n3 Convert to DDS\n4 Convert to TGA");
Console.Write("\n\n");

Console.Write("Enter your command number: ");
string cmd = Console.ReadLine();

/*
if(int.Parse(cmd) == 1)
ConvertDirToJpeg(ext);
if(int.Parse(cmd) == 2)
ConvertDirToPng(ext);
if(int.Parse(cmd) == 3)
ConvertDirToDds(ext);
if(int.Parse(cmd) == 4)
ConvertDirToTga(ext);
*/
}

public static void ConvertDirToJpegCmd (string ext)
{
string qMin = "95";
Console.Write("[Default: 95] Minimum JPEG Quality: ");
string qMinInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(qMinInput.Trim())) qMin = qMinInput;

string qMax = qMin;
Console.Write("[Leave blank to use fixed quality] Maximum JPEG Quality: ");
string qMaxInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(qMaxInput.Trim())) qMax = qMaxInput;

string recursive = "n";
Console.Write("[Default: n] Recursive (include all subfolders)? (y/n): ");
string recursiveInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(recursiveInput.Trim())) recursive = recursiveInput;

string delSrc = "n";
Console.Write("[Default: n] Delete source file afterwards? (y/n): ");
string delSrcInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(delSrcInput.Trim())) delSrc = delSrcInput;

ConvertDirToJpeg(Program.currentDir, ext, int.Parse(qMin), int.Parse(qMax), Program.IsTrue(recursive), Program.IsTrue(delSrc));
}

public static void ConvertDirToJpeg (string path, string ext, int qMin, int qMax, bool recursive, bool delSrc)
{
int counter = 1;
Expand All @@ -68,26 +22,10 @@ public static void ConvertDirToJpeg (string path, string ext, int qMin, int qMax
Program.PostProcessing();
}

public static void ConvertDirToPng (string path, string ext, int q, bool recursive, bool delSrc)
public async static void ConvertDirToPng (string path, string ext, int q, bool recursive, bool delSrc)
{
/*
string pngCompressionLvl = "0";
Console.Write("[Default: 0] Set PNG compression (0-100): ");
string newPngCompressionLvl = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(newPngCompressionLvl.Trim())) pngCompressionLvl = newPngCompressionLvl;
string recursive = "n";
Console.Write("[Default: n] Recursive (include all subfolders)? (y/n): ");
string recursiveInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(recursiveInput.Trim())) recursive = recursiveInput;
string delSrc = "n";
Console.Write("[Default: n] Delete source file afterwards? (y/n): ");
string delSrcInput = Console.ReadLine();
if(!string.IsNullOrWhiteSpace(delSrcInput.Trim())) delSrc = delSrcInput;
*/

int counter = 1;
int iterationsUntilWait = 150;
FileInfo[] files = Program.GetFiles(path, ext, recursive);

Program.PreProcessing();
Expand All @@ -96,6 +34,8 @@ public static void ConvertDirToPng (string path, string ext, int q, bool recursi
Program.ShowProgress("Converting Image ", counter, files.Length);
ConvertUtils.ConvertToPng(file.FullName, q, delSrc);
counter++;

if(counter % 10 == 0) await Program.PutTaskDelay();
}
Program.PostProcessing(true);
}
Expand Down Expand Up @@ -128,6 +68,21 @@ public static void ConvertDirToDds (string path, string ext, bool recursive, boo
Program.PostProcessing();
}

public static void ConvertDirToDdsCrunch (bool recursive, int qMin, int qMax, bool delSrc)
{
int counter = 1;
FileInfo[] files = Program.GetFiles(Program.currentDir, Program.currentExt, recursive);

Program.PreProcessing();
foreach(FileInfo file in files)
{
Program.ShowProgress("Crunching Image ", counter, files.Length);
counter++;
CrunchInterface.CrunchImage(file.FullName, qMin, qMax, delSrc);
}
Program.PostProcessing();
}

public static void ConvertDirToTga (string path, string ext, bool recursive, bool delSrc)
{
/*
Expand Down
66 changes: 66 additions & 0 deletions CrunchInterface.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
using MagickUtils.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;

namespace MagickUtils
{
class CrunchInterface
{
static string crunchExePath;
public enum DXTQuality { superfast, fast, normal, better, uber };
public static DXTQuality currentQual;
public static bool currentMipMode;

public static void ExtractExe ()
{
GetExePath();
if(File.Exists(crunchExePath))
{
//Program.Print("[CrunchInterface] crunch.exe already exists at " + crunchExePath);
return;
}
File.WriteAllBytes(crunchExePath, Resources.crunch);
Program.Print("[CrunchInterface] Extraced crunch.exe to " + crunchExePath);
}

public static void DeleteExe ()
{
GetExePath();
File.Delete(crunchExePath);
}

static void GetExePath ()
{
string exeFolder = AppDomain.CurrentDomain.BaseDirectory;
crunchExePath = Path.Combine(exeFolder, "crunch.exe");
}

public static void CrunchImage (string path, int qMin, int qMax, bool deleteSrc)
{
ExtractExe();
ProcessStartInfo psi;
string mipMode = "None";
if(currentMipMode) mipMode = "UseSourceOrGenerate";
string args1 = "-file \"" + path + "\" -outsamedir";
string args2 = " -quality " + GetRandomQuality(qMin, qMax)
+ " -fileformat dds"
+ " -mipMode " + mipMode
+ " -dxtQuality " + currentQual.ToString();
psi = new ProcessStartInfo { FileName = crunchExePath, Arguments = args1 + args2 };
Program.Print("Crunch args:" + args2);
/* if(hideCmd) */ psi.WindowStyle = ProcessWindowStyle.Hidden;
Process crunchProcess = new Process { StartInfo = psi };
crunchProcess.Start();
crunchProcess.WaitForExit();
Program.Print("Done crunching " + path);
}

static int GetRandomQuality (int qMin, int qMax)
{
Random rand = new Random();
return rand.Next(qMin, qMax + 1);
}
}
}
Loading

0 comments on commit f90328f

Please sign in to comment.