yur, понятно. Уже нашёл ошибку, хорошо кодирует. Могу выложить и кодер и декодер, но мне интересно ещё посмотреть и вашу реализацию со свежим взглядом.К тому же, файл получается чуть больше, чем от sprview.
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;
Последний раз редактировалось AzAtom; 27.06.2016 в 12:17.
Оффтоп
Здравствуйте.
Ковыряю тут тоже потихоньку граф. форматы Вектора. Возник вот такой вопрос: есть ли у кого все 256 цветов Векторовской палитры в стандартном RGB-виде (для конвертирования в BMP)?[свернуть]
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
Личка заполнена! И чистить я ее не буду! Пользуйтесь адекватными средствами связи! Спасибо.
Seamos realistas y hagamos lo imposible!
Ernesto Che GuevaraПереехал сюда: SteinBlume (ex ATM CP/M Explorer)
http://era-cg.su
AzAtom, Спасибо за алгоритм - у меня действительно нет сейчас времени, чуток позже
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Итак, добавил небольшие изменения:
1) Авто коррекция палиты - теперь при открытиии bmp с палитрой оная исправляется в Векторовскую автоматом а также при открытии палитры pal тоже автокоррекция
2) Палитра пера и заливки выбирается и настраивается отдельно - правой кнопкой мыши выбирается палитра пера, левой палитра заливки
3)Добавлена индикация обозначения палитры пера и заливки
4) Исправлена ошибка - при открытии палитры использовался один диалог открытия и при попытке открыть файл bmp приложение вылетало - теперь всё в норме
На остальное пока нет времени - Сами понимаете лето на исходе, надо зарабатывать
Последний раз редактировалось yur; 26.08.2016 в 17:56.
Дружище, а ты сам пробовал рисовать в своем редакторе? Ты им доволен? На кой это выкладывать?
Никто кроме тебя пока что не жаловался
А вообще я уже писал- не нравится проходи мимо иначе сам пошлю
Считай, что я не равнодушный. Capture color нет, увеличение 8 мало. И тогда уж убери разворот на весь экран. Если ты это делаешь для себя, базару нет, но когда выкладываешь для всех, это выглядит как - "я научился что-то делать на pc, зацените!"
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)