Created
April 13, 2022 16:21
-
-
Save jmcd/db2c3ff254ec9be701ccf04a46d5732a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace RomTile; | |
using SixLabors.ImageSharp; | |
using SixLabors.ImageSharp.PixelFormats; | |
internal static class Program | |
{ | |
private const int TileWidth = 8; | |
private const int TileHeight = 8; | |
private const int NumberOfPixelsInATile = TileWidth * TileHeight; | |
private const int NumberOfTilesAcross = 32; | |
private static readonly Rgba32[] Palette = | |
{ | |
new(0x09, 0x18, 0x20), | |
new(0x35, 0x67, 0x56), | |
new(0x88, 0xC0, 0x70), | |
new(0xE0, 0xF8, 0xD0), | |
}; | |
private static void Main(string[] args) | |
{ | |
var rom = File.ReadAllBytes(args[0]); | |
var numberOfPixelsInRom = rom.Length / 2 * TileWidth; | |
var numberOfTilesInRom = numberOfPixelsInRom / NumberOfPixelsInATile; | |
var numberOfTilesTall = (int)Math.Ceiling((double)numberOfTilesInRom / NumberOfTilesAcross); | |
var image = new Image<Rgba32>(NumberOfTilesAcross * TileWidth, numberOfTilesTall * TileHeight); | |
var pixelCount = 0; | |
for (var i = 0; i < rom.Length; i += 2) | |
{ | |
var b0 = rom[i]; | |
var b1 = rom[i + 1]; | |
var pixelLine = new int[TileWidth]; | |
for (var j = pixelLine.Length - 1; j >= 0; j--) | |
{ | |
var mask = 1 << j; | |
var p = 2 * ((b1 & mask) == 0 ? 0 : 1) + ((b0 & mask) == 0 ? 0 : 1); | |
pixelLine[pixelLine.Length - 1 - j] = p; | |
var indexOfPixelInTile = pixelCount % NumberOfPixelsInATile; | |
var tileIndex = pixelCount / NumberOfPixelsInATile; | |
var yInTile = indexOfPixelInTile / TileWidth; | |
var xInTile = indexOfPixelInTile % TileWidth; | |
var y0 = tileIndex / NumberOfTilesAcross * TileHeight; | |
var x0 = tileIndex % NumberOfTilesAcross * TileWidth; | |
var x = x0 + xInTile; | |
var y = y0 + yInTile; | |
image[x, y] = Palette[p]; | |
pixelCount += 1; | |
} | |
} | |
image.SaveAsPng("/tmp/tiles.png"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment