67 lines
1.8 KiB
C#
67 lines
1.8 KiB
C#
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|