Skip to content

Commit f9e8e07

Browse files
committed
fixed transparent image
1 parent 57ad544 commit f9e8e07

File tree

3 files changed

+131
-28
lines changed

3 files changed

+131
-28
lines changed

ImageToGTR3/Form1.Designer.cs

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ImageToGTR3/Form1.cs

+128-26
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,36 @@ public partial class Form1 : Form
1818
private byte[] _streamBuffer;
1919
List<Color> colorMapList = new List<Color>();
2020
int ImageWidth;
21-
public Form1()
21+
bool Shutdown = false;
22+
public Form1(string[] args)
2223
{
2324
InitializeComponent();
25+
if (args.Length > 0)
26+
{
27+
progressBar1.Value = 0;
28+
progressBar1.Maximum = args.Length;
29+
progressBar1.Visible = true;
30+
string fileNameFull = "";
31+
Shutdown = true;
32+
foreach (string file in args)
33+
{
34+
progressBar1.Value++;
35+
if (File.Exists(file) && Path.GetExtension(file).ToLower() == ".png")
36+
{
37+
try
38+
{
39+
ImageMagick.MagickImage image = new ImageMagick.MagickImage(file);
40+
fileNameFull = PngToTga(file);
41+
if (fileNameFull != null) ImageFix(fileNameFull);
42+
}
43+
catch (Exception)
44+
{
45+
TgaToPng(file);
46+
}
47+
}
48+
}
49+
progressBar1.Visible = false;
50+
}
2451
}
2552

2653
// меняем цвет текста и рамки для groupBox
@@ -79,6 +106,7 @@ private void button_TgaToPng_Click(object sender, EventArgs e)
79106
foreach (String file in FileNames)
80107
{
81108
progressBar1.Value++;
109+
path = TgaToPng(file);
82110
try
83111
{
84112
//string fileNameFull = openFileDialog.FileName;
@@ -128,13 +156,76 @@ private void button_TgaToPng_Click(object sender, EventArgs e)
128156
}
129157
}
130158
progressBar1.Visible = false;
131-
if (Directory.Exists(path))
159+
if (path.Length > 5 && Directory.Exists(path))
132160
{
133161
Process.Start(new ProcessStartInfo("explorer.exe", path));
134162
}
135163
}
136164
}
137165

166+
private string TgaToPng(string file)
167+
{
168+
string path = "";
169+
if (File.Exists(file))
170+
{
171+
try
172+
{
173+
//string fileNameFull = openFileDialog.FileName;
174+
ImageMagick.MagickImage image;
175+
string fileNameFull = file;
176+
string fileName = Path.GetFileNameWithoutExtension(fileNameFull);
177+
path = Path.GetDirectoryName(fileNameFull);
178+
//fileName = Path.Combine(path, fileName);
179+
int RealWidth = -1;
180+
using (var fileStream = File.OpenRead(fileNameFull))
181+
{
182+
_streamBuffer = new byte[fileStream.Length];
183+
fileStream.Read(_streamBuffer, 0, (int)fileStream.Length);
184+
185+
Header header = new Header(_streamBuffer);
186+
ImageDescription imageDescription = new ImageDescription(_streamBuffer, header.GetImageIDLength());
187+
RealWidth = imageDescription.GetRealWidth();
188+
189+
//image = new ImageMagick.MagickImage(fileStream, ImageMagick.MagickFormat.Tga);
190+
}
191+
192+
using (var fileStream = File.OpenRead(fileNameFull))
193+
{
194+
image = new ImageMagick.MagickImage(fileStream, ImageMagick.MagickFormat.Tga);
195+
}
196+
197+
//image = new ImageMagick.MagickImage(fileNameFull, ImageMagick.MagickFormat.Tga);
198+
image.Format = ImageMagick.MagickFormat.Png32;
199+
if (RealWidth > 0 && RealWidth != image.Width)
200+
{
201+
int height = image.Height;
202+
image = (ImageMagick.MagickImage)image.Clone(RealWidth, height);
203+
}
204+
205+
ImageMagick.IMagickImage Blue = image.Separate(ImageMagick.Channels.Blue).First();
206+
ImageMagick.IMagickImage Red = image.Separate(ImageMagick.Channels.Red).First();
207+
image.Composite(Red, ImageMagick.CompositeOperator.Replace, ImageMagick.Channels.Blue);
208+
image.Composite(Blue, ImageMagick.CompositeOperator.Replace, ImageMagick.Channels.Red);
209+
210+
//image.ColorType = ImageMagick.ColorType.Palette;
211+
path = Path.Combine(path, "Png");
212+
if (!Directory.Exists(path))
213+
{
214+
Directory.CreateDirectory(path);
215+
}
216+
string newFileName = Path.Combine(path, fileName + ".png");
217+
image.Write(newFileName);
218+
//Bitmap bitmap = image.ToBitmap();
219+
//panel1.BackgroundImage = bitmap;
220+
}
221+
catch (Exception exp)
222+
{
223+
MessageBox.Show("Не верный формат исходного файла" + Environment.NewLine +
224+
exp);
225+
}
226+
}
227+
return path;
228+
}
138229
private void button_PngToTga_Click(object sender, EventArgs e)
139230
{
140231
OpenFileDialog openFileDialog = new OpenFileDialog();
@@ -174,8 +265,20 @@ private string PngToTga(string fileNameFull)
174265
string fileName = Path.GetFileNameWithoutExtension(fileNameFull);
175266
string path = Path.GetDirectoryName(fileNameFull);
176267
//fileName = Path.Combine(path, fileName);
177-
ImageMagick.MagickImage image = new ImageMagick.MagickImage(fileNameFull);
178-
ImageMagick.MagickImage image_temp = new ImageMagick.MagickImage(fileNameFull);
268+
ImageMagick.MagickImage image;
269+
ImageMagick.MagickImage image_temp;
270+
271+
using (var fileStream = File.OpenRead(fileNameFull))
272+
{
273+
image = new ImageMagick.MagickImage(fileStream);
274+
}
275+
using (var fileStream = File.OpenRead(fileNameFull))
276+
{
277+
//image = new ImageMagick.MagickImage(fileStream);
278+
image_temp = new ImageMagick.MagickImage(fileStream);
279+
}
280+
//image = new ImageMagick.MagickImage(fileNameFull);
281+
//image_temp = new ImageMagick.MagickImage(fileNameFull);
179282
ImageWidth = image.Width;
180283
int newWidth = ImageWidth;
181284
int newHeight = image.Height;
@@ -187,37 +290,24 @@ private string PngToTga(string fileNameFull)
187290

188291
if (ImageWidth != newWidth)
189292
{
190-
//ImageMagick.MagickImage imageNew =
191-
// new ImageMagick.MagickImage(fileNameFull);
192-
////imageNew.ColorSpace = ImageMagick.ColorSpace.sRGB;
193-
////imageNew.Format = ImageMagick.MagickFormat.Png;
194-
////imageNew.Depth = 8;
195-
////imageNew.ColorSpace = ImageMagick.ColorSpace.sRGB;
196-
////image = (ImageMagick.MagickImage)image.Clone(newWidth, newHeight);
197-
////image_temp = (ImageMagick.MagickImage)image_temp.Clone(newWidth, newHeight);
198-
////imageNew.Composite(image, ImageMagick.CompositeOperator.Src);
199-
//ImageMagick.Drawables dr = new ImageMagick.Drawables();
200-
//dr.Rectangle(image.Width + 1, 0, newWidth, newHeight);
201-
//dr.FillOpacity(new ImageMagick.Percentage(100));
202-
//image = (ImageMagick.MagickImage)image.Clone(newWidth, newHeight);
203-
//image_temp = (ImageMagick.MagickImage)image_temp.Clone(newWidth, newHeight);
204-
//image.Draw();
205-
//image_temp.Draw();
206-
////image = (ImageMagick.MagickImage)imageNew.Clone(newWidth, newHeight);
207-
//image_temp = (ImageMagick.MagickImage)imageNew.Clone(newWidth, newHeight);
208293
Bitmap bitmap = image.ToBitmap();
209294
Bitmap bitmapNew = new Bitmap(newWidth, newHeight);
210295
Graphics gfx = Graphics.FromImage(bitmapNew);
211296
gfx.DrawImage(bitmap, 0, 0, bitmap.Width, bitmap.Height);
212297
image = new ImageMagick.MagickImage(bitmapNew);
213298
image_temp = new ImageMagick.MagickImage(bitmapNew);
214299
}
300+
ImageMagick.Pixel pixel = image.GetPixels().GetPixel(0, 0);
301+
//pixel = new ImageMagick.Pixel(0, 0, 4);
302+
bool transparent = false;
303+
//if (pixel.Channels == 4 && pixel[3] < 256) transparent = true;
304+
215305
image.ColorType = ImageMagick.ColorType.Palette;
216306
if (image.ColorSpace != ImageMagick.ColorSpace.sRGB)
217307
{
218308
image = image_temp;
219309
//image.ColorSpace = ImageMagick.ColorSpace.sRGB;
220-
ImageMagick.Pixel pixel = image.GetPixels().GetPixel(0, 0);
310+
//ImageMagick.Pixel pixel = image.GetPixels().GetPixel(0, 0);
221311
ushort[] p;
222312
if (pixel[2] > 256)
223313
{
@@ -227,7 +317,11 @@ private string PngToTga(string fileNameFull)
227317
else
228318
{
229319
if (pixel.Channels == 4) p = new ushort[] { pixel[0], pixel[1], (ushort)(pixel[2] + 256), pixel[3] };
230-
else p = new ushort[] { pixel[0], pixel[1], (ushort)(pixel[2] + 256) };
320+
else
321+
{
322+
p = new ushort[] { pixel[0], pixel[1], (ushort)(pixel[2] + 256) };
323+
transparent = true;
324+
}
231325
}
232326
image.GetPixels().SetPixel(0, 0, p);
233327
pixel = image.GetPixels().GetPixel(0, 0);
@@ -246,12 +340,17 @@ private string PngToTga(string fileNameFull)
246340
//List<string> colorMapList = new List<string>();
247341
for (int i = 0; i < image.ColormapSize; i++)
248342
{
249-
250343
colorMapList.Add(image.GetColormap(i));
344+
251345
//Color tempColor = image.GetColormap(i);
252346
//colorMapList.Add(tempColor.ToArgb().ToString());
253347
//Color tempColor2 = Color.FromArgb(Int32.Parse(colorMapList[i]));
254348
}
349+
if (transparent && colorMapList.Count == 2)
350+
{
351+
colorMapList[0] = Color.FromArgb(0, colorMapList[0].R, colorMapList[0].G, colorMapList[0].B);
352+
colorMapList[1] = Color.FromArgb(0, colorMapList[1].R, colorMapList[1].G, colorMapList[1].B);
353+
}
255354
//File.WriteAllLines(fileName + ".txt", colorMapList);
256355
path = Path.Combine(path, "Fix");
257356
if (!Directory.Exists(path))
@@ -373,6 +472,9 @@ private void ImageFix(string fileNameFull)
373472
}
374473
}
375474

376-
475+
private void Form1_Shown(object sender, EventArgs e)
476+
{
477+
if (Shutdown) Application.Exit();
478+
}
377479
}
378480
}

ImageToGTR3/Program.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ static class Program
1212
/// Главная точка входа для приложения.
1313
/// </summary>
1414
[STAThread]
15-
static void Main()
15+
static void Main(string[] args)
1616
{
1717
Application.EnableVisualStyles();
1818
Application.SetCompatibleTextRenderingDefault(false);
19-
Application.Run(new Form1());
19+
Application.Run(new Form1(args));
2020
}
2121
}
2222
}

0 commit comments

Comments
 (0)