67 lines
1.8 KiB
C#
Raw Normal View History

2025-07-25 15:29:14 +05:00
using UnityEngine;
using System.Collections;
using System;
using System.IO;
namespace DigitalOpus.MB.Core
{
public static class MB_TGAWriter
{
public static void Write(Color[] pixels, int width, int height, string path)
{
// Delete the file if it exists.
if (File.Exists(path))
{
File.Delete(path);
}
//Create the file.
FileStream fs = File.Create(path);
Write(pixels, width, height, fs);
}
public static void Write(Color[] pixels, int width, int height, Stream output)
{
byte[] pixelsArr = new byte[pixels.Length * 4];
int offsetSource = 0;
int offsetDest = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Color value = pixels[offsetSource];
pixelsArr[offsetDest] = (byte)(value.b * 255); // b
pixelsArr[offsetDest + 1] = (byte)(value.g * 255); // g
pixelsArr[offsetDest + 2] = (byte)(value.r * 255); // r
pixelsArr[offsetDest + 3] = (byte)(value.a * 255); // a
offsetSource++;
offsetDest += 4;
}
}
byte[] header = new byte[] {
0, // ID length
0, // no color map
2, // uncompressed, true color
0, 0, 0, 0,
0,
0, 0, 0, 0, // x and y origin
(byte)(width & 0x00FF),
(byte)((width & 0xFF00) >> 8),
(byte)(height & 0x00FF),
(byte)((height & 0xFF00) >> 8),
32, // 32 bit bitmap
0 };
using (BinaryWriter writer = new BinaryWriter(output))
{
writer.Write(header);
writer.Write(pixelsArr);
}
}
}
}