оттенками серого в javascript? Вчера писал с частично похожим вопросом, посоветовали webgl, но это не совсем то, надо что-то попроще, просто создать 16 битный png, можно даже не отрисовывать
И какие конкретно проблемы?
Ну в целом хотя бы какую библиотеку использовать, какая с этим справится? В какую сторону копать?
Ну на канвасе можно попиксельно нарисовать что нужно и сохранить как пнг. А вот библиотека лучше загуглить
Почему вебгл не совсем то?
Я на канвасе и нарисовал, только канвас не даст вывести 16 битную градацию серого, я там нарисовал как 8 битную. Или может? Просто я выводил в канвас как rgb
Тогда лучше на нпм пошарься, может найдешь подходящую библиотеку
Что такое нпм? Я находил pngjs и png-coder, но пока из них ничего не получил, тупо не умею пользоваться, в javascript недавно
Спасибо)
Для такой задачи вряд ли нужен webgl. Достаточно обычного canvas-api
https://developer.mozilla.org/ru/docs/Web/API/Canvas_API/Tutorial/Pixel_manipulation_with_canvas Проходишь по каждому пикселю, забираешь из него красный+зелёный+синий, вычисляешь по своей формуле оттенок серого и сохраняешь. Вроде как достаточно)
Canvas мне выводит 256 градаций серого, там я настроил его как вывод RGB png, т.е например есть у меня число в массиве 39680, это 16 битной, делю его на 256, получаю 8 битное число 155, вот и вывожу его как rgb (155, 155, 155)
Если есть 256 градаций, то и 16 из них сделать можно, разве нет?
Кстати, зачем тебе 16 бит?
16бит это 65к градаций)
Пиксельная манипуляция это не то, у меня нет изначального изображения, просто массив размером n на m, заполненный 16 битными числами. Из него надо создавать png. Проходиться просто не почему)
Тогда канвас вообще вряд ли подойдёт. Не уверен даже, что вебгл умеет в более чем 256 значений для каждого канала цвета
Тебе именно изображение нужно или просто инфу кодируешь?
Нет, только наоборот, из 16 можно сделать 8, понизить разрядность
Понял. Таких тонкостей не знаю. Не уверен, что веб в этом плане является хорошим решением. Я сталкивался только с RGB-цветами, где каждый канал 0-255
16 бит надо для последующей компьютерной обработки, это рентгеновский снимок, человек различает 256 градаций, пк мотом обработать то, что человек не различил
Так а зачем ПК сам рисунок? Пусть массив чисел обрабатывает. А человек будет смотреть на снимок с 256 градациями
Ты можешь сохранить часть инфы условно в R канал, часть в G канал))
И вот канвас дает тебе 24бита на каждый пиксель))
Ну в целом достаточно просто массив данных оформить по формату png, ну в итоге это и должно дать изображение, а выводить мне достаточно 256 градаций, но это я сделал в канвас
Имхо человек различает намного больше 256 градаций и оттенков
Программа для обработки принимает tiff формат, как из массива данных сделать tiff, я уже сломал мозг, поэтому надо сделать png, его потом конвертировать в tiff) Второй пункт как сделать посоветовали вчера, первый теперь надо реализовать
Вообще покури документацию пнг-кодер, там должно быть что тебе нужно
Ну разбить на старшую и младшую часть, это тоже как вариант, просто как потом склеить эти два получивших я изображений?
Там же 24 бита это по 8 на rgb? Итого имеем 8 битную глубину цвета серого
Ну вот читаю про pngjs и png-coder, пока безрезультатно. Я даже библиотеку не смог нормально подключить) Беда пока что с js
Нет, это просто кодирование. Будет не изображение, а мазня какаято, но при парсинге через старщие/младщие части будешь получать необходимую инфу
Ну я идею понял, с разбиение на 16 старшие и младшие биты по 8, но мне не понятна реализация, как потом разгребать все это в рамках формата png, да и в самом формате есть 16 bit grayscale, надо вписываться в эти рамки формата. Ну и про 24 бит, вот сейчас у меня канвас сохраняется как 8 битный rgb, если смотреть свойства png потом, то там будет: глубина цвета 24
Мне вообще проще было бы создать структуру png формата согласно его 16 bit scale, и тупо её заполнять значениями массива, но не могу разгрестись в формате png и как эту структуру создать в js
Обсуждают сегодня