Во-первых, то, что вы указали в скрипте, вероятно, не является файлом .raw.
Хотя существует множество файлов различных форматов, использующих это расширение, я не совсем понимаю, что метаданных вообще нет, поскольку это необходимо, чтобы хотя бы знать размер изображения.
Прошу прощения за будущих читателей, но этот ответ показывает только, как преобразовать необработанные 8-битные значения в реальное изображение ...
Так что теперь, без размера изображения, но если изображение в квадрате, мы можемна самом деле делать это только с помощью byteLength (ширина и высота будут являться квадратным корнем из byteLength).
Основные шаги:
- (преобразовать вашу шестнадцатеричную строку вфактический Uint8Array)
- установить все 4-е значения Uint8ClampedArray в 4 раза больше, чем первый Uint8Array (это установит альфа-канал нашего скорого изображения RGBA)
- передать этот Uint8ClampedArray в ImageData() конструктор.
- поместите эти ImageData на холстnversion):
const fake = new Uint8Array( 256*256 );
crypto.getRandomValues(fake); // get random values
processSquareBitmap(fake.buffer);
function processSquareBitmap(buffer) {
const view = new Uint8Array(buffer);
const out = new Uint8ClampedArray(buffer.byteLength * 4);
const size = Math.sqrt(view.length);
if(size % 1) {
console.error('not a square');
return;
}
// set alpha channel
view.forEach((a,i)=>out[(i*4)+3] = a);
const image = new ImageData(out, size, size)
const canvas = document.createElement('canvas');
canvas.width = canvas.height = size;
canvas.getContext('2d').putImageData(image, 0,0);
// if you want to save a png version
// canvas.toBlob(b=> saveAs(b, 'bitmap.png'));
document.body.appendChild(canvas);
}
Но для изображений не в квадрате вы должны иметь фактическую ширину и высоту.
Я смог вывести те из шестнадцатеричных данных OP, и, таким образом, мог сделать это скрипка , которая будет отображать их изображение.