PDA

Просмотр полной версии : Создание графического редактора



yur
17.06.2015, 15:06
И так, добрался я и до этой идеи.
Выкладываю сырую версию графического редактора для Вектора 6128.
Пока что он умеет сохранять в формате bmp 4bit.
Нужен совет знающих и заинтересованных лиц - информация и конкретные советы.

SaNchez
17.06.2015, 16:46
И так, добрался я и до этой идеи.
Выкладываю сырую версию графического редактора для Вектора 6128.
Пока что он умеет сохранять в формате bmp 4bit.
Нужен совет знающих и заинтересованных лиц - информация и конкретные советы.

Жесть какая. А какой смысл в ЭТОМ? Чем не устраивают готовые редакторы? Какой функционал хочешь получить?

yur
18.06.2015, 17:15
SaNchez, приведи пример хорошего редактора - кинь ссылки

SaNchez
19.06.2015, 01:21
SaNchez, приведи пример хорошего редактора - кинь ссылки

Тут на свой вкус выбирать надо, даже Paint подойдет.
Мне лично нравится Sib Icon Editor: http://www.sibcode.com/icon-editor/

NovaStorm
19.06.2015, 10:24
для Вектора 6128.
>Графит.EXE
Ну ты понял...
Что такого у Вектора, что требует специализированный редактор НЕ на нём самом?

newart
19.06.2015, 15:06
SaNchez, приведи пример хорошего редактора - кинь ссылки
http://www.humanbalance.net/gale/us/

http://www.humanbalance.net/gale/pics/galecap1.jpg

yur
19.06.2015, 21:32
ну вот теперь вижу

yur
25.01.2016, 23:28
Не смотря ни на что - я решил продолжить работу над своим незатейливым редактором,
выкладываю версию с более расширенными возможностями, теперь можно редактировать и сохранять палитру и рисовать стандартные фигуры и не совсем.
Единственное что хотелось бы реализовать как можно скорей - так это создание *.spr файла. Я грызу этот формат но одному и без точных знаний тяжковато - хотелось бы узнать об этом формате у самого автора.

P.S. эта тема для заинтересованных лиц, так что ребята с бредовыми возмущениями проходят мимо иначе сам укажу дорогу на юх куда улетают птицы...

yur
03.03.2016, 18:18
Исправил ошибки отрисовки
Добаил сетку
Изменил режимы размера экрана
Добавил возможность просмотра из директории
Добавил буфер изменений

Вот, тестируйте

yur
29.03.2016, 00:46
Обновление:

Исправил метод отрисовки - теперь когда курсор за пределами полотна рисования линия и фигуры продолжают рисоваться (как в пайнте)
Добавил галку автосохранения изображений в буфер - теперь добавление в буфер можно контролировать
Исправил сохранение в буфер - теперь сохранение только при поднятии левой кнопки мыши
Исправил ошибку при открытии файла
Добавил кнопку добавления изображений в буфер

В перспективе - добавление буфера палитр ну и соответственно наращивание возможностей

artyr_n
29.03.2016, 01:08
под вайном удалось поставить только одну точку после чего перестало реагировать.

- - - Добавлено - - -

работает пока не поставиш первую точку

yur
29.03.2016, 01:29
У меня Win XP SP3 - скорее всего WinE не полностью поддерживает API Windows, т.к. по нажатию мыши происходит перехват курсора

artyr_n
29.03.2016, 01:48
мышью клацаю по всем элементом управления и все нормально, перестаёт реагировать когда ставиш точку в поле картинки

yur
29.03.2016, 11:52
под вайном удалось поставить только одну точку после чего перестало реагировать.

- - - Добавлено - - -

работает пока не поставиш первую точку


У меня Win XP SP3 - скорее всего WinE не полностью поддерживает API Windows, т.к. по нажатию мыши происходит перехват курсора.

Имеется ввиду нажатие на полотно рисования

yur
28.04.2016, 20:22
Исправил некоторые ошибки,
теперь программа не вылетает при сохранении файла
подправил метод перерисовки экрана.

Тестируйте пока что есть

artyr_n
28.04.2016, 23:51
Под вайном теперь работает, но при изменении масштаба (кнопки ЭКРАН) задумывается на секунд 15 после этого продолжает работать.
Ну и наверное кнопку с выбранным масштабом нужно оставлять утопленной. Что означает 1/1 в заголовке окна?

yur
29.04.2016, 17:18
1/1 - один из одного рисунка находящегося в одноимённой директории, в данном редакторе существует возможность просмотра картинок из директории, список создаётся автоматически при открытии картинки

про тормоза в вайне могу предположить что это особенности работы данного эмулятора

AzAtom
09.06.2016, 12:02
yur, хотел посмотреть форматы рисунков и не получилось. :(

В общем, нашёл несколько скриншотов от вектор 06ц по 8 КБ, с наскока не открыл их, нашёл описание формата видеопамяти и открыл. Насколько я понял, однобитные картинки чёрно-белые, но по сути могут состоять из любых доступных 2 цветов.
Поэтому у меня вопрос, как сохраняется в файл цветной рисунок из нескольких плоскостей? Предполагаю, что так же, как и хранятся в памяти - 8 КБ одной плоскости + 8 КБ второй плоскости и т.д. А как сохраняется палитра? Просто приписывается в конец 16 байт?

И вопрос по вашей программе. Что делать с этой картинкой в формате bmp? Нужен специальный конвертер для подготовки к использованию на векторе?

Почему бы не сохранять сразу в виде снимков экрана вектора 8+8+8+8 КБ данные плоскостей+16 байт палитры?

yur
14.06.2016, 09:22
"как сохраняется в файл цветной рисунок из нескольких плоскостей?" - скорее всего зависит от формата, кпримеру bmp массивами из линий...
"А как сохраняется палитра?" - если вопрос про данный редактор то я сохраняю её из bmp-рисунка
"Что делать с этой картинкой в формате bmp? Нужен специальный конвертер для подготовки к использованию на векторе?" - да именно так
"Почему бы не сохранять сразу в виде снимков экрана вектора 8+8+8+8 КБ данные плоскостей+16 байт палитры?" - это как? формат spr я только изучаю, писал выше

shuran33
14.06.2016, 15:40
yur, а под Mac OS нет сборки?

AzAtom
14.06.2016, 17:36
это как?
Вот например экран от zx spectrum состоит из 6144 байт самой 1 битной картинки + 768 байт атрибутов следом, и сохраняется в файл в таком же виде. Т.е., можно записать из файла как есть в экранную память и будет картинка. А на векторе как принято сохранять? Вроде, битовые плоскости можно сохранять в таком виде - они в памяти идут последовательно. А с палитрой как?


формат spr я только изучаю
Можно ссылку на описание? Я тоже хочу поковырять его.

yur
14.06.2016, 18:21
ссылок нет, автор sprview сам не помнит куда дел инфу (это как я понял со слов автора)
я беру подручные средства такие как yy chr
для начала создаю в "графите" картинку с одной буквой А, сохраняю файл bmp
генерирую из него при помощи утилиты sprview файл с расширением spr и открываю его при помощи yy chr
а там уже визуально рассматриваешь что и как...
далее меняешь цвет буквы и снова повторяешь процедуру и т.д и т.п. ...
и естественно какой нибудь hex-редактор

AzAtom
14.06.2016, 22:57
Нашёл sprview версии 1.80. Он много файлов .spr не открывает. В том числе и те, которые сам же и сохранил. Пишет ошибку "Integer overflow". Похоже, в этом формате использовано сжатие. Пока повременю с его штурмом. :)

yur
15.06.2016, 02:22
вот версия 1.81
надеюсь автор не против

ivagor
15.06.2016, 05:59
Последняя версия SPRView 1.83 здесь (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=847652&viewfull=1#post847652)

AzAtom
15.06.2016, 13:48
Вот 1.83 уже открыл все .spr файлы.

Крутой там диалог открытия файлов. От windows 3.1 наверное. :)

- - - Добавлено - - -

Поковырял немного .spr, понял как его распаковать. Единственное, не понял назначение 2х байтов, №16 и 17 от начала файла.
Долго думал, как определить конец несжатых байтов и начало сжатой области.

Чуть позже алгоритм набросаю, если кому интересно.

- - - Добавлено - - -


для начала создаю в "графите" картинку с одной буквой А, сохраняю файл bmp
генерирую из него при помощи утилиты sprview файл с расширением spr и открываю его при помощи yy chr
а там уже визуально рассматриваешь что и как...
Буквы это сложные образы. Я начал с 1-2-4 и более точек по углам и небольших отрезков в разных комбинациях.

ivagor
15.06.2016, 17:27
Крутой там диалог открытия файлов. От windows 3.1 наверное.
Причина простая - "модерновый" диалог почему-то приводил к утечкам памяти, а с "антикварным" все было нормально. Возможно потом это поправили, но я не проверял и оставил как есть.

AzAtom
15.06.2016, 17:36
ivagor, Так вы автор sprview? Формат .spr тоже сами придумали? Вопрос у меня, возможно, странный. Зачем в файле счётчик количества байт помещён за данными? :)

- - - Добавлено - - -


"модерновый" диалог почему-то приводил к утечкам памяти, а с "антикварным" все было нормально.
В delphi 4 такого точно нет.

yur
15.06.2016, 17:46
Чуть позже алгоритм набросаю, если кому интересно.
конечно надо

- - - Добавлено - - -


Поковырял немного .spr, понял как его распаковать. Единственное, не понял назначение 2х байтов, №16 и 17 от начала файла.
№16 это палитра

AzAtom
15.06.2016, 18:01
Вот, что удалось узнать по формату .spr:

- Размер файла кратен 128 байт. Неиспользуемые байты в конце заполнены 0.
- Сохранены 4 битовые плоскости от Вектор 06ц. Распаковываются в 32 КБ единым куском как есть,
без разбивки на битовые плоскости, столбцы и строки.
- Вперемешку используется сжатие RLE и куски несжатых данных.
- В файле по смещению 0 хранится 16 байтовая палитра вектора.
- Байты 16 и 17 непонятного назначения, во всех просмотренных файлах .spr равны 0.
- По смещению 18 начинается массив самого изображения.
- Байты изображения начинаются с левого нижнего угла и поднимаются сначала вверх и затем сдвиг вправо,
что соответствует организации экранной памяти вектора.
- В данных изображения могут идти как области несжатых байт, так и сжатых.
Несжатые данные. Подряд идут N байт несжатых данных, их надо просто скопировать.
За ними идёт байт со значением N. При этом, N принимает значения от 1 по 128.
Сжатые данные. Идёт байт данных, который повторяется N раз. За ним идёт байт со значением 128+N.
N принимает значения от 1 до 127.
- С начала файла однозначно не распаковать данные, поэтому, нужно распаковывать с конца,
тогда сначала будет идти количество повторов или количество несжатых байт.


Попробую сделать распаковщик и преобразователь в bmp.

yur
15.06.2016, 19:28
- Байты 16 и 17 непонятного назначения, во всех просмотренных файлах .spr равны 0.
не во всех

AzAtom
15.06.2016, 19:35
Чтение палитры и распаковку данных вроде сделал. Теперь надо битовые плоскости преобразовать в формат windows bmp. Только не хочу возиться с 4 битной картинкой и палитрами, поэтому сделаю преобразование в 16 битную картинку.

yur
15.06.2016, 19:39
Только не хочу возиться с 4 битной картинкой и палитрами, поэтому сделаю преобразование в 16 битную картинку.
ни чего сложного не вижу

AzAtom
15.06.2016, 19:40
не во всех
Можете дать ссылку на .spr, где эти байты не равны 0?

В архиве Amstrad spr.7z и в сгенерированных в sprview эти 2 байта равны 0. Предположу, что один из них может кодировать цвет бордюра, что сейчас не актуально, а второй кодирует используемые битовые плоскости. Хорошо бы разобраться.

yur
15.06.2016, 19:46
Чуть позже алгоритм набросаю, если кому интересно.

ну и где же обещанное )

- - - Добавлено - - -


Можете дать ссылку на .spr, где эти байты не равны 0?
вообщето да - этоя ошибся, извиняюсь

AzAtom
15.06.2016, 19:47
ну и где же обещанное )
Так здесь же http://zx-pk.ru/threads/25281-sozdanie-graficheskogo-redaktora.html?p=874626&viewfull=1#post874626 расписал формат :)

А сам алгоритм вот, вроде готов:
// Распаковка сжатых данных.
fsize:=fsize-1; // Ставим указатель на последний загруженный байт
while buf^[fsize]=0 do
fsize:=fsize-1;
cpos:=32767;
repeat
b:=buf^[fsize-1];
c:=buf^[fsize ]-1;
if c>=128 then begin // Сжатые данные. Скопировать "b" "c" раз
c:=c and $7F;
if cpos-c >=0 then
for x:=0 to c do
spb^[cpos-x]:=b;
end else begin // Несжатые данные, просто скопировать "c" байт
if (cpos-c >=0) and (fsize-c-1 >0) then
for x:=0 to c do
spb^[cpos-x]:=buf^[fsize-x-1];
fsize:=fsize-c; // Сдвинем указатель в источнике на "с" байт
end;
cpos:=cpos-c-1; // Сдвиг указателя приёмника на следующий байт
fsize:=fsize-2; // Сдвиг указателя источника на следующиую группу байт
until fsize<=18;

yur
16.06.2016, 00:45
Предположу, что один из них может кодировать цвет бордюра
цвет бордюра определяет первый цвет в палитре - в файле spr первый байт

опять же могу ошибаться

- - - Добавлено - - -

только что протестировал байты №16,№17 - на смену цвета бордюра они не влияют

- - - Добавлено - - -


yur, а под Mac OS нет сборки?
к сожалению нет

ivagor
16.06.2016, 18:20
ivagor, Так вы автор sprview? Формат .spr тоже сами придумали?
1. да
2. нет. Насколько я знаю, формат spr предложил неизвестный автор редактора Draw (http://asdasd.rpg.fi/scalar/ware/664/)

AzAtom
18.06.2016, 14:29
yur, ну что, сделали компрессор в формат .spr? Я начал, но ошибка проскакивает, не пойму где.

yur
18.06.2016, 19:02
yur, ну что, сделали компрессор в формат .spr? Я начал, но ошибка проскакивает, не пойму где.
ещё нет - пока других дел хватает, но потихоньку буду заниматься

AzAtom
18.06.2016, 23:22
yur, понятно. Уже нашёл ошибку, хорошо кодирует. Могу выложить и кодер и декодер, но мне интересно ещё посмотреть и вашу реализацию со свежим взглядом. :) К тому же, файл получается чуть больше, чем от sprview.

AzAtom
27.06.2016, 12:15
Вот мой вариант компрессора. На входе в SrcCount количество байт для сжатия. Для вектора будет 32768. Через переменную DestCount на входе передаётся размер буфера и он очищается. На выходе содержит количество использованных байт. Это количество байт может быть сохранено в файл при соответствующем округлении до 128.


// Сжатие данных изображения Вектор 06Ц
procedure PackVEC2SPRv1(SrcBuf:pbytearray; SrcCount:integer; DestBuf:pbytearray; var DestCount:integer);
var
i:integer;
b,ce,cne:byte;
ob:word;
begin
// На входе 32 килобайт экранной области. На выходе в переменной DestCount
// возвращается номер последнего байта в сжатых данных. Размер не может превышать 34048
// В самом неудачном случае размер выходных данных получится 18+32768+259=33045 байт
// Процедура не трогает первые 18 байт выходного массива, поэтому, палитру можно записать до сжатия.

// Очистка области от 18 до DestCount (34047) байт
for i:=18 to DestCount-1 do begin
DestBuf^[i]:=0;
end;

// Сжатие данных
DestCount:=18;
ce:=0;
cne:=0;
// ob:=SrcBuf^[0];
ob:=256;
for i:=0 to SrcCount-1 do begin
b:=SrcBuf^[i];

// Компрессор. Вариант 1
if b=ob then begin
// Если байт равен предыдущему, то если есть группа разных байт, запишем их

if cne>0 then begin //Нашли 2 одинаковых байта и счётчик разных больше 0, то
cne:=cne-1; // его нужно уменьшить на 1
ce:=ce+1; // и счётчик одинаковых увеличить на 1
end;

if cne>0 then begin // Если разных байтов >0 то записываем их в буфер
DestCount:=DestCount+cne;
DestBuf^[DestCount]:=cne;
repeat
DestBuf^[DestCount-cne]:=SrcBuf^[i-cne-1];
cne:=cne-1;
until cne=0;
DestCount:=DestCount+1;
end;

// Далее считаем одинаковые байты
ce:=ce+1;
if ce>=127 then begin // Если количество одинаковых байт >=127 то записываем это
DestBuf^[DestCount ]:=b;
DestBuf^[DestCount+1]:=ce+128;
DestCount:=DestCount+2;
ce:=0;
end;
end else begin
if ce=1 then begin
cne:=cne+1;
ce:=0;
end;
if ce>1 then begin // Если есть группа одинаковых байт, запишем их
DestBuf^[DestCount ]:=ob;
DestBuf^[DestCount+1]:=ce+128;
DestCount:=DestCount+2;
ce:=0;
end;

// Считаем разные байты
cne:=cne+1;
if cne>=127 then begin // Если разных байтов >= 127 то записываем их в буфер
DestCount:=DestCount+cne;
DestBuf^[DestCount]:=cne;
repeat
DestBuf^[DestCount-cne]:=SrcBuf^[i-cne+1];
cne:=cne-1;
until cne=0;
DestCount:=DestCount+1;
end;
end;{}
ob:=b;
end;

// В конце записываем остаток
if cne>0 then begin // Если разных байтов >0 то записываем их в буфер
DestCount:=DestCount+cne;
DestBuf^[DestCount]:=cne;
repeat
DestBuf^[DestCount-cne]:=SrcBuf^[SrcCount-cne+1];
cne:=cne-1;
until cne=0;
DestCount:=DestCount+1;
end;

if ce>0 then begin // Если есть группа одинаковых байт, запишем их
DestBuf^[DestCount ]:=ob;
DestBuf^[DestCount+1]:=ce+128;
DestCount:=DestCount+2;
end;

end;

Black Cat / Era CG
27.06.2016, 17:08
Здравствуйте.
Ковыряю тут тоже потихоньку граф. форматы Вектора. Возник вот такой вопрос: есть ли у кого все 256 цветов Векторовской палитры в стандартном RGB-виде (для конвертирования в BMP)?

KTSerg
27.06.2016, 19:12
Здравствуйте.
Ковыряю тут тоже потихоньку граф. форматы Вектора. Возник вот такой вопрос: есть ли у кого все 256 цветов Векторовской палитры в стандартном RGB-виде (для конвертирования в BMP)?
С программой SPRView есть файлик "color.pal" - может в нём есть что-то подходящее...

Black Cat / Era CG
27.06.2016, 19:56
С программой SPRView есть файлик "color.pal" - может в нём есть что-то подходящее...
Ага. Через минуту-две, как написал, о нем же вспомнил. И да, там именно то, что надо, то есть вся палитра в RGB.

yur
01.07.2016, 23:48
AzAtom, Спасибо за алгоритм - у меня действительно нет сейчас времени, чуток позже

yur
26.08.2016, 17:51
Итак, добавил небольшие изменения:
1) Авто коррекция палиты - теперь при открытиии bmp с палитрой оная исправляется в Векторовскую автоматом а также при открытии палитры pal тоже автокоррекция
2) Палитра пера и заливки выбирается и настраивается отдельно - правой кнопкой мыши выбирается палитра пера, левой палитра заливки
3)Добавлена индикация обозначения палитры пера и заливки
4) Исправлена ошибка - при открытии палитры использовался один диалог открытия и при попытке открыть файл bmp приложение вылетало - теперь всё в норме

На остальное пока нет времени - Сами понимаете лето на исходе, надо зарабатывать

SaNchez
26.08.2016, 18:26
http://cs.pikabu.ru/images/big_size_comm/2013-05_1/13674414211007.jpg

Дружище, а ты сам пробовал рисовать в своем редакторе? Ты им доволен? На кой это выкладывать?

yur
26.08.2016, 18:32
Никто кроме тебя пока что не жаловался
А вообще я уже писал- не нравится проходи мимо иначе сам пошлю

SaNchez
26.08.2016, 18:41
Считай, что я не равнодушный. Capture color нет, увеличение 8 мало. И тогда уж убери разворот на весь экран. Если ты это делаешь для себя, базару нет, но когда выкладываешь для всех, это выглядит как - "я научился что-то делать на pc, зацените!"

yur
26.08.2016, 18:53
разворот то зачем убирать - ведь прога ещё далеко не финальная?

SaNchez
26.08.2016, 19:06
Не в развороте дело, а в том, что ты *тутмногоненормативойлексики* выкладываешь. Ты чо, считаешь пользоватей вектора тупыми дураками, которые сами такой "редактор" за час не напишут? В чем смысл, где логика?

yur
26.08.2016, 19:11
если так говоришь то что же до сих пор никто не выложил?
напиши лучше - выложи
и вообще харе нудистикой страдать

SaNchez
26.08.2016, 19:15
Да потому-что стыдно такое выкладывать. Такое выложить, все равно что прилюдно обделаться...

yur
26.08.2016, 19:17
тебе прям как старухе - не угодишь
ты походу один д'артаньян
энтузиаст хренов

SaNchez
26.08.2016, 19:18
По-ходу:)

yur
26.08.2016, 19:21
тогда не гадь тему "заинтересованное лицо"
а то принёс с собой гадости а на других спихиваешь

(вложение на стр 5)

SaNchez
26.08.2016, 19:31
Просто бомбит от таких пограммистов, соррян. Занимайся дальше публичным изучением программирования на pc.

yur
26.08.2016, 19:42
ну и не суй своё жало куда не надо - проходи мимо со соей вонью и нытьём(соррян)

Hacker VBI
26.08.2016, 19:43
yur, ты не обижайся :)
реально ещё всё сыро, ты и сам знаешь это. на фулскрин не развернёшь даже :)

а SaNchez и сам очень хорошо соображает в дельфи, я вот в курсе)
да и не только в дельфи (http://spectralinterlude.com/)... :)))

yur
26.08.2016, 19:48
Ну и хорошо пусть знает
На словах Вы - Львы Толстые, а на деле - .....

Hacker VBI
26.08.2016, 19:53
ты правильно считаешь создателя Кастлвании 128 Львом.

yur
26.08.2016, 19:55
Эта тема не для фанатов zx - попрошу не флудить и не троллить

(вложение на стр 5)

Hacker VBI
26.08.2016, 19:58
окей
прошу прислушаться к мнению возможных пользователей твоей программы.

yur
26.08.2016, 20:03
окей

Jons
03.09.2016, 13:23
Нормальный редактор, не слушай никого) из предложений: добавить стирание пикселя правой кнопкой, очень не хватает.

yur
04.04.2019, 15:45
Из нового:
1) Умеет открывать/Сохранять *.spr
2) Добавлен инструмент "Выделение"
3) Добавлено окно выбора палитры из доступных цветов
4) Окна палитры, инструметов, главного окна и прочих - разделены
5) Окно редактора свободно растягивается

тестируйте, пишите что желательно добавить в редактор

shuran33
04.04.2019, 16:02
Нормальный редактор, не слушай никого) из предложений: добавить стирание пикселя правой кнопкой, очень не хватает.

Да, это очень нужно.

dbk
11.04.2019, 01:49
Из нового:
1) Умеет открывать/Сохранять *.spr
2) Добавлен инструмент "Выделение"
3) Добавлено окно выбора палитры из доступных цветов
4) Окна палитры, инструметов, главного окна и прочих - разделены
5) Окно редактора свободно растягивается

тестируйте, пишите что желательно добавить в редактор

Это... Я ни разу не программист и уже им никогда не стану ( немного тестировкой занимался написанного ПО (когда-то "работал" в спайке с очень хорошим программером и на выходе получился очень классный продукт), с вашего молчаливого согласия я озвучу свою шальную мысль, которую вы, я думаю, пропустите мимо ушей, но все же: есть такой редактор для олдскульщиков grafx2 (http://grafx2.chez.com/) он GPL-льный (с исходниками (http://pulkomandy.tk/projects/GrafX2/browser)).
Может лучше оттолкнуться от данных исходников и допилить его под особенности графики Вектора?!

Правильно выше написали - никого не слушай! Нравится - пиши, набивай скилл! Очень пригодится.

yur
12.04.2019, 09:57
Эти исходники на си-подобном, я не знаю си, не умею компилировать написанное на си,
можно конечно порыться почитать исходники, опять же - всё упирается во время.
Мне на KOL&MCK проще - он очень удобен.
У меня все рабочие коды написаны на ссылках и соответственно оптимизированы чтобы минимум нагрузки на проц - короче обойдёмся и без чужого