-
-
Save subzey/e29406374b2cafc591eb to your computer and use it in GitHub Desktop.
fancygradient.js
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
#!/usr/bin/env node | |
var writeStream = require('fs').createWriteStream('grad.pcx'); | |
function write(){ | |
byteArray = Array.prototype.slice.call(arguments); | |
writeStream.write(new Buffer(byteArray)); | |
} | |
// Производитель. Всегда 0x0A | |
write(0x0A); | |
// Версия | |
// 0 - 16 стандартных цветов EGA | |
// 2 - 16 произвольных цветов | |
// 3 - без палитры | |
// 5 - с расширенной палитрой | |
write(0x02); | |
// Сжатие. Одно возможное значение - 1 (RLE) | |
write(0x01); | |
// Бит на пиксель. | |
// 4 цвета - 2 бита | |
write(0x02); | |
// Координаты левого верхнего угла. | |
// Без второй пары координат уже смысла не имеет, пишем для удобства (0, 0) | |
write(0x00, 0x00, 0x00, 0x00); | |
// Координаты правого нижнего угла. | |
// (16, 7), 4 x Uint, little-endian | |
write(0x10, 0x00, 0x07, 0x00); | |
// Разрешение по вертикали и горизонтали. | |
// Имеет смысл при печати и факсимильной связи. Пишем 72 dpi, 72 dpi | |
write(0x48, 0x00, 0x48, 0x00); | |
// 16-цветовая палитра. По одному байту на R, G и B. | |
write(0x00, 0x00, 0x0); // (0) | |
write(0x80, 0x80, 0x80); // (1) | |
write(0x40, 0x40, 0x40); // (2) | |
// добиваем палитру пустыми значениями до длины 16 | |
write(0x00, 0x00, 0x00); // (3) | |
write(0x00, 0x00, 0x00); // (4) | |
write(0x00, 0x00, 0x00); // (5) | |
write(0x00, 0x00, 0x00); // (6) | |
write(0x00, 0x00, 0x00); // (7) | |
write(0x00, 0x00, 0x00); // (8) | |
write(0x00, 0x00, 0x00); // (9) | |
write(0x00, 0x00, 0x00); // (10) | |
write(0x00, 0x00, 0x00); // (11) | |
write(0x00, 0x00, 0x00); // (12) | |
write(0x00, 0x00, 0x00); // (13) | |
write(0x00, 0x00, 0x00); // (14) | |
write(0x00, 0x00, 0x00); // (15) | |
// Зарезеривировано | |
write(0x0); | |
// Количество битовых плоскостей. R, G и B определяются палитрой, так что одна. | |
write(0x1); | |
// Байтов на сканлайн. | |
// В случае нескольких плоскостей в сканлайне — байтов на плоскость. | |
// Должно быть четным. | |
// 17 значений по 2 бита плюс выравнивание - шесть байт | |
write(0x06, 0x00); | |
// Тип палитры CGA. Мы ее не используем, так что забиваем нулями. | |
write(0x00, 0x00); | |
// Разрешение экрана. Еще одна мета-информация, которую все игнорируют. | |
// Пусть будет, 640x480 | |
write(0x80, 0x02, 0xe0, 0x01); | |
// Добиваем нулями заголовок до 128 байт | |
for (var i=0; i<54; i++){ | |
write(0x00); | |
} | |
// Растр | |
write(0xC6, 0x00); | |
write(0x15, 0xC3, 0x55, 0x00, 0x00); | |
write(0x19, 0xC3, 0x99, 0x00, 0x00); | |
write(0x26, 0xC3, 0x66, 0x00, 0x00); | |
write(0x2A, 0xC3, 0xAA, 0x00, 0x00); | |
write(0xC6, 0x22); | |
write(0x08, 0xC3, 0x88, 0x00, 0x00); | |
write(0xC6, 0x00); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment