Просмотр полной версии : Создание графического редактора
И так, добрался я и до этой идеи.
Выкладываю сырую версию графического редактора для Вектора 6128.
Пока что он умеет сохранять в формате bmp 4bit.
Нужен совет знающих и заинтересованных лиц - информация и конкретные советы.
И так, добрался я и до этой идеи.
Выкладываю сырую версию графического редактора для Вектора 6128.
Пока что он умеет сохранять в формате bmp 4bit.
Нужен совет знающих и заинтересованных лиц - информация и конкретные советы.
Жесть какая. А какой смысл в ЭТОМ? Чем не устраивают готовые редакторы? Какой функционал хочешь получить?
SaNchez, приведи пример хорошего редактора - кинь ссылки
SaNchez, приведи пример хорошего редактора - кинь ссылки
Тут на свой вкус выбирать надо, даже Paint подойдет.
Мне лично нравится Sib Icon Editor: http://www.sibcode.com/icon-editor/
NovaStorm
19.06.2015, 10:24
для Вектора 6128.
>Графит.EXE
Ну ты понял...
Что такого у Вектора, что требует специализированный редактор НЕ на нём самом?
SaNchez, приведи пример хорошего редактора - кинь ссылки
http://www.humanbalance.net/gale/us/
http://www.humanbalance.net/gale/pics/galecap1.jpg
Не смотря ни на что - я решил продолжить работу над своим незатейливым редактором,
выкладываю версию с более расширенными возможностями, теперь можно редактировать и сохранять палитру и рисовать стандартные фигуры и не совсем.
Единственное что хотелось бы реализовать как можно скорей - так это создание *.spr файла. Я грызу этот формат но одному и без точных знаний тяжковато - хотелось бы узнать об этом формате у самого автора.
P.S. эта тема для заинтересованных лиц, так что ребята с бредовыми возмущениями проходят мимо иначе сам укажу дорогу на юх куда улетают птицы...
Исправил ошибки отрисовки
Добаил сетку
Изменил режимы размера экрана
Добавил возможность просмотра из директории
Добавил буфер изменений
Вот, тестируйте
Обновление:
Исправил метод отрисовки - теперь когда курсор за пределами полотна рисования линия и фигуры продолжают рисоваться (как в пайнте)
Добавил галку автосохранения изображений в буфер - теперь добавление в буфер можно контролировать
Исправил сохранение в буфер - теперь сохранение только при поднятии левой кнопки мыши
Исправил ошибку при открытии файла
Добавил кнопку добавления изображений в буфер
В перспективе - добавление буфера палитр ну и соответственно наращивание возможностей
под вайном удалось поставить только одну точку после чего перестало реагировать.
- - - Добавлено - - -
работает пока не поставиш первую точку
У меня Win XP SP3 - скорее всего WinE не полностью поддерживает API Windows, т.к. по нажатию мыши происходит перехват курсора
мышью клацаю по всем элементом управления и все нормально, перестаёт реагировать когда ставиш точку в поле картинки
под вайном удалось поставить только одну точку после чего перестало реагировать.
- - - Добавлено - - -
работает пока не поставиш первую точку
У меня Win XP SP3 - скорее всего WinE не полностью поддерживает API Windows, т.к. по нажатию мыши происходит перехват курсора.
Имеется ввиду нажатие на полотно рисования
Исправил некоторые ошибки,
теперь программа не вылетает при сохранении файла
подправил метод перерисовки экрана.
Тестируйте пока что есть
Под вайном теперь работает, но при изменении масштаба (кнопки ЭКРАН) задумывается на секунд 15 после этого продолжает работать.
Ну и наверное кнопку с выбранным масштабом нужно оставлять утопленной. Что означает 1/1 в заголовке окна?
1/1 - один из одного рисунка находящегося в одноимённой директории, в данном редакторе существует возможность просмотра картинок из директории, список создаётся автоматически при открытии картинки
про тормоза в вайне могу предположить что это особенности работы данного эмулятора
yur, хотел посмотреть форматы рисунков и не получилось. :(
В общем, нашёл несколько скриншотов от вектор 06ц по 8 КБ, с наскока не открыл их, нашёл описание формата видеопамяти и открыл. Насколько я понял, однобитные картинки чёрно-белые, но по сути могут состоять из любых доступных 2 цветов.
Поэтому у меня вопрос, как сохраняется в файл цветной рисунок из нескольких плоскостей? Предполагаю, что так же, как и хранятся в памяти - 8 КБ одной плоскости + 8 КБ второй плоскости и т.д. А как сохраняется палитра? Просто приписывается в конец 16 байт?
И вопрос по вашей программе. Что делать с этой картинкой в формате bmp? Нужен специальный конвертер для подготовки к использованию на векторе?
Почему бы не сохранять сразу в виде снимков экрана вектора 8+8+8+8 КБ данные плоскостей+16 байт палитры?
"как сохраняется в файл цветной рисунок из нескольких плоскостей?" - скорее всего зависит от формата, кпримеру bmp массивами из линий...
"А как сохраняется палитра?" - если вопрос про данный редактор то я сохраняю её из bmp-рисунка
"Что делать с этой картинкой в формате bmp? Нужен специальный конвертер для подготовки к использованию на векторе?" - да именно так
"Почему бы не сохранять сразу в виде снимков экрана вектора 8+8+8+8 КБ данные плоскостей+16 байт палитры?" - это как? формат spr я только изучаю, писал выше
shuran33
14.06.2016, 15:40
yur, а под Mac OS нет сборки?
это как?
Вот например экран от zx spectrum состоит из 6144 байт самой 1 битной картинки + 768 байт атрибутов следом, и сохраняется в файл в таком же виде. Т.е., можно записать из файла как есть в экранную память и будет картинка. А на векторе как принято сохранять? Вроде, битовые плоскости можно сохранять в таком виде - они в памяти идут последовательно. А с палитрой как?
формат spr я только изучаю
Можно ссылку на описание? Я тоже хочу поковырять его.
ссылок нет, автор sprview сам не помнит куда дел инфу (это как я понял со слов автора)
я беру подручные средства такие как yy chr
для начала создаю в "графите" картинку с одной буквой А, сохраняю файл bmp
генерирую из него при помощи утилиты sprview файл с расширением spr и открываю его при помощи yy chr
а там уже визуально рассматриваешь что и как...
далее меняешь цвет буквы и снова повторяешь процедуру и т.д и т.п. ...
и естественно какой нибудь hex-редактор
Нашёл sprview версии 1.80. Он много файлов .spr не открывает. В том числе и те, которые сам же и сохранил. Пишет ошибку "Integer overflow". Похоже, в этом формате использовано сжатие. Пока повременю с его штурмом. :)
вот версия 1.81
надеюсь автор не против
Последняя версия SPRView 1.83 здесь (http://zx-pk.ru/threads/24285-orion-pro-softvernye-dela.html?p=847652&viewfull=1#post847652)
Вот 1.83 уже открыл все .spr файлы.
Крутой там диалог открытия файлов. От windows 3.1 наверное. :)
- - - Добавлено - - -
Поковырял немного .spr, понял как его распаковать. Единственное, не понял назначение 2х байтов, №16 и 17 от начала файла.
Долго думал, как определить конец несжатых байтов и начало сжатой области.
Чуть позже алгоритм набросаю, если кому интересно.
- - - Добавлено - - -
для начала создаю в "графите" картинку с одной буквой А, сохраняю файл bmp
генерирую из него при помощи утилиты sprview файл с расширением spr и открываю его при помощи yy chr
а там уже визуально рассматриваешь что и как...
Буквы это сложные образы. Я начал с 1-2-4 и более точек по углам и небольших отрезков в разных комбинациях.
Крутой там диалог открытия файлов. От windows 3.1 наверное.
Причина простая - "модерновый" диалог почему-то приводил к утечкам памяти, а с "антикварным" все было нормально. Возможно потом это поправили, но я не проверял и оставил как есть.
ivagor, Так вы автор sprview? Формат .spr тоже сами придумали? Вопрос у меня, возможно, странный. Зачем в файле счётчик количества байт помещён за данными? :)
- - - Добавлено - - -
"модерновый" диалог почему-то приводил к утечкам памяти, а с "антикварным" все было нормально.
В delphi 4 такого точно нет.
Чуть позже алгоритм набросаю, если кому интересно.
конечно надо
- - - Добавлено - - -
Поковырял немного .spr, понял как его распаковать. Единственное, не понял назначение 2х байтов, №16 и 17 от начала файла.
№16 это палитра
Вот, что удалось узнать по формату .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.
- Байты 16 и 17 непонятного назначения, во всех просмотренных файлах .spr равны 0.
не во всех
Чтение палитры и распаковку данных вроде сделал. Теперь надо битовые плоскости преобразовать в формат windows bmp. Только не хочу возиться с 4 битной картинкой и палитрами, поэтому сделаю преобразование в 16 битную картинку.
Только не хочу возиться с 4 битной картинкой и палитрами, поэтому сделаю преобразование в 16 битную картинку.
ни чего сложного не вижу
не во всех
Можете дать ссылку на .spr, где эти байты не равны 0?
В архиве Amstrad spr.7z и в сгенерированных в sprview эти 2 байта равны 0. Предположу, что один из них может кодировать цвет бордюра, что сейчас не актуально, а второй кодирует используемые битовые плоскости. Хорошо бы разобраться.
Чуть позже алгоритм набросаю, если кому интересно.
ну и где же обещанное )
- - - Добавлено - - -
Можете дать ссылку на .spr, где эти байты не равны 0?
вообщето да - этоя ошибся, извиняюсь
ну и где же обещанное )
Так здесь же 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;
Предположу, что один из них может кодировать цвет бордюра
цвет бордюра определяет первый цвет в палитре - в файле spr первый байт
опять же могу ошибаться
- - - Добавлено - - -
только что протестировал байты №16,№17 - на смену цвета бордюра они не влияют
- - - Добавлено - - -
yur, а под Mac OS нет сборки?
к сожалению нет
ivagor, Так вы автор sprview? Формат .spr тоже сами придумали?
1. да
2. нет. Насколько я знаю, формат spr предложил неизвестный автор редактора Draw (http://asdasd.rpg.fi/scalar/ware/664/)
yur, ну что, сделали компрессор в формат .spr? Я начал, но ошибка проскакивает, не пойму где.
yur, ну что, сделали компрессор в формат .spr? Я начал, но ошибка проскакивает, не пойму где.
ещё нет - пока других дел хватает, но потихоньку буду заниматься
yur, понятно. Уже нашёл ошибку, хорошо кодирует. Могу выложить и кодер и декодер, но мне интересно ещё посмотреть и вашу реализацию со свежим взглядом. :) К тому же, файл получается чуть больше, чем от sprview.
Вот мой вариант компрессора. На входе в 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)?
Здравствуйте.
Ковыряю тут тоже потихоньку граф. форматы Вектора. Возник вот такой вопрос: есть ли у кого все 256 цветов Векторовской палитры в стандартном RGB-виде (для конвертирования в BMP)?
С программой SPRView есть файлик "color.pal" - может в нём есть что-то подходящее...
Black Cat / Era CG
27.06.2016, 19:56
С программой SPRView есть файлик "color.pal" - может в нём есть что-то подходящее...
Ага. Через минуту-две, как написал, о нем же вспомнил. И да, там именно то, что надо, то есть вся палитра в RGB.
AzAtom, Спасибо за алгоритм - у меня действительно нет сейчас времени, чуток позже
Итак, добавил небольшие изменения:
1) Авто коррекция палиты - теперь при открытиии bmp с палитрой оная исправляется в Векторовскую автоматом а также при открытии палитры pal тоже автокоррекция
2) Палитра пера и заливки выбирается и настраивается отдельно - правой кнопкой мыши выбирается палитра пера, левой палитра заливки
3)Добавлена индикация обозначения палитры пера и заливки
4) Исправлена ошибка - при открытии палитры использовался один диалог открытия и при попытке открыть файл bmp приложение вылетало - теперь всё в норме
На остальное пока нет времени - Сами понимаете лето на исходе, надо зарабатывать
http://cs.pikabu.ru/images/big_size_comm/2013-05_1/13674414211007.jpg
Дружище, а ты сам пробовал рисовать в своем редакторе? Ты им доволен? На кой это выкладывать?
Никто кроме тебя пока что не жаловался
А вообще я уже писал- не нравится проходи мимо иначе сам пошлю
Считай, что я не равнодушный. Capture color нет, увеличение 8 мало. И тогда уж убери разворот на весь экран. Если ты это делаешь для себя, базару нет, но когда выкладываешь для всех, это выглядит как - "я научился что-то делать на pc, зацените!"
разворот то зачем убирать - ведь прога ещё далеко не финальная?
Не в развороте дело, а в том, что ты *тутмногоненормативойлекс ки* выкладываешь. Ты чо, считаешь пользоватей вектора тупыми дураками, которые сами такой "редактор" за час не напишут? В чем смысл, где логика?
если так говоришь то что же до сих пор никто не выложил?
напиши лучше - выложи
и вообще харе нудистикой страдать
Да потому-что стыдно такое выкладывать. Такое выложить, все равно что прилюдно обделаться...
тебе прям как старухе - не угодишь
ты походу один д'артаньян
энтузиаст хренов
тогда не гадь тему "заинтересованное лицо"
а то принёс с собой гадости а на других спихиваешь
(вложение на стр 5)
Просто бомбит от таких пограммистов, соррян. Занимайся дальше публичным изучением программирования на pc.
ну и не суй своё жало куда не надо - проходи мимо со соей вонью и нытьём(соррян)
Hacker VBI
26.08.2016, 19:43
yur, ты не обижайся :)
реально ещё всё сыро, ты и сам знаешь это. на фулскрин не развернёшь даже :)
а SaNchez и сам очень хорошо соображает в дельфи, я вот в курсе)
да и не только в дельфи (http://spectralinterlude.com/)... :)))
Ну и хорошо пусть знает
На словах Вы - Львы Толстые, а на деле - .....
Hacker VBI
26.08.2016, 19:53
ты правильно считаешь создателя Кастлвании 128 Львом.
Эта тема не для фанатов zx - попрошу не флудить и не троллить
(вложение на стр 5)
Hacker VBI
26.08.2016, 19:58
окей
прошу прислушаться к мнению возможных пользователей твоей программы.
Нормальный редактор, не слушай никого) из предложений: добавить стирание пикселя правой кнопкой, очень не хватает.
Из нового:
1) Умеет открывать/Сохранять *.spr
2) Добавлен инструмент "Выделение"
3) Добавлено окно выбора палитры из доступных цветов
4) Окна палитры, инструметов, главного окна и прочих - разделены
5) Окно редактора свободно растягивается
тестируйте, пишите что желательно добавить в редактор
shuran33
04.04.2019, 15:02
Нормальный редактор, не слушай никого) из предложений: добавить стирание пикселя правой кнопкой, очень не хватает.
Да, это очень нужно.
Из нового:
1) Умеет открывать/Сохранять *.spr
2) Добавлен инструмент "Выделение"
3) Добавлено окно выбора палитры из доступных цветов
4) Окна палитры, инструметов, главного окна и прочих - разделены
5) Окно редактора свободно растягивается
тестируйте, пишите что желательно добавить в редактор
Это... Я ни разу не программист и уже им никогда не стану ( немного тестировкой занимался написанного ПО (когда-то "работал" в спайке с очень хорошим программером и на выходе получился очень классный продукт), с вашего молчаливого согласия я озвучу свою шальную мысль, которую вы, я думаю, пропустите мимо ушей, но все же: есть такой редактор для олдскульщиков grafx2 (http://grafx2.chez.com/) он GPL-льный (с исходниками (http://pulkomandy.tk/projects/GrafX2/browser)).
Может лучше оттолкнуться от данных исходников и допилить его под особенности графики Вектора?!
Правильно выше написали - никого не слушай! Нравится - пиши, набивай скилл! Очень пригодится.
Эти исходники на си-подобном, я не знаю си, не умею компилировать написанное на си,
можно конечно порыться почитать исходники, опять же - всё упирается во время.
Мне на KOL&MCK проще - он очень удобен.
У меня все рабочие коды написаны на ссылках и соответственно оптимизированы чтобы минимум нагрузки на проц - короче обойдёмся и без чужого
Доброго времени,
И так :
Добавил горячих клавиш,
Иконки инструмента отображаются корректно,
Копипаст и вырезание доступны,
Имеются небольшие настройки,
Добавлен инструмент шаблон(но до конца ещё не доделан, но работать можно),
Есть клавиши поворота и отражения области выделенного,
Присутствует мелкая сетка,
Исправлена ошибка вылета при копипасте,
Исправлена ошибка сохранения формата spr - теперь данный формат корректно отображается в программе zas.com, предназначенной для Вектора.
shuran33
12.05.2020, 22:28
Доброго времени,
И так :
Добавил горячих клавиш,
Иконки инструмента отображаются корректно,
Копипаст и вырезание доступны,
Имеются небольшие настройки,
Добавлен инструмент шаблон(но до конца ещё не доделан, но работать можно),
Есть клавиши поворота и отражения области выделенного,
Присутствует мелкая сетка,
Исправлена ошибка вылета при копипасте,
Исправлена ошибка сохранения формата spr - теперь данный формат корректно отображается в программе zas.com, предназначенной для Вектора.
Благодарю за развитие редактора, очень признателен! Буду тестировать.
Исправил ошибку зависания при запросе на подтверждение,
Исправил ошибку при смене палитры,
Добавил автоподбор цвета при смене палитры и заморозку палитры
Исправил ещё ошибок:
Теперь новый файл создаётся корректно при замороженной палитре,
Цвет не искажается при смене инструмента если палитра заморожена
Исправил работу инструмента - одновременно с другими рисовался шаблон,
Исправил отображение сообщения запроса на подтверждение,
Исправил отображение сетки на смене палитры и на смене файла
Убрал ошибку искажения цвета на выборе размера экрана при выбранном инструменте выделения,
Убрал ошибку вылета из-за изменения размера экрана на N°1 при выбранном инструменте выделения,
На данный момент искажений цвета не обнаружил,
Вставка из буфера обмена пока не поддаётся автоопределению цвета, шаблон тоже
Убрал ошибку искажения цвета на выборе размера экрана при выбранном инструменте выделения,
Убрал ошибку вылета из-за изменения размера экрана на N°1 при выбранном инструменте выделения,
На данный момент искажений цвета не обнаружил,
Вставка из буфера обмена пока не поддаётся автоопределению цвета, шаблон тоже
Пили, дружище, пили функционал, потом поработаем с тобой (я в качестве жесткого тестера) над интерфесом ибо вырвиглазно, пока...
Ок, по возможности буду пилить
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot