DFP

From FragoriaWiki

(Difference between revisions)
Jump to: navigation, search
 
(5 intermediate revisions not shown)
Line 18: Line 18:
# '''width''' - ширина картинки ''(без знаковое целое двух-байтовое число)''
# '''width''' - ширина картинки ''(без знаковое целое двух-байтовое число)''
# '''height''' - высота картинки ''(без знаковое целое двух-байтовое число)''
# '''height''' - высота картинки ''(без знаковое целое двух-байтовое число)''
-
# загадочное знаковое двух-байтовое число, нужное для правильной интерпретации раздела данных
+
# '''ShiftX''' - сдвиг по x, влево вправо относительно точки приложения ''(знаковое двух-байтовое число)''
-
# обычно ноль ''(загадочное знаковое двух-байтовое число)''
+
# '''ShiftY''' - сдвиг по y, вверх вниз, обычно ноль ''(знаковое двух-байтовое число)''
-
# загадочное без знаковое целое двух-байтовое число
+
# '''BeginX''' - начальный сдвиг данных ''(без знаковое целое двух-байтовое число)'' нужный для правильной интерпретации раздела данных, фактически количество прозрачных точек в начале первой строки.
# '''PalSize1''' - количество цветов в первом части палитры ''(без знаковое целое одно-байтовое число)''
# '''PalSize1''' - количество цветов в первом части палитры ''(без знаковое целое одно-байтовое число)''
-
# '''PalSize2''' - количество цветов во второй части палитры ''(без знаковое целое одно-байтовое число)''  
+
# '''PalSize2''' - общее количество цветов в палитре ''(без знаковое целое одно-байтовое число)''  
== Палитра ==
== Палитра ==
Палитра состоит из двух частей:
Палитра состоит из двух частей:
Line 37: Line 37:
Каждый пиксель изображения описан одним байтом, содержащим номер поля палитры, в котором сохранен цвет этого [http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%BA%D1%81%D0%B5%D0%BB пикселя].
Каждый пиксель изображения описан одним байтом, содержащим номер поля палитры, в котором сохранен цвет этого [http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%BA%D1%81%D0%B5%D0%BB пикселя].
== Данные ==
== Данные ==
 +
 +
В начале раздела данных записан его полный размер в файле, 4-ех -байтное без знаковое число.
Данные аналогично формату [http://ru.wikipedia.org/wiki/PNG PNG] сжаты алгоритмом [http://ru.wikipedia.org/wiki/DEFLATE DEFLATE], его так же иногда именую [http://ru.wikipedia.org/wiki/Zlib zlib], но внутренний формат не сжатых данных отличен. Хранятся только непрозрачные или частично прозрачные пикселы, а массивы прозрачных пикселов пропускаются.
Данные аналогично формату [http://ru.wikipedia.org/wiki/PNG PNG] сжаты алгоритмом [http://ru.wikipedia.org/wiki/DEFLATE DEFLATE], его так же иногда именую [http://ru.wikipedia.org/wiki/Zlib zlib], но внутренний формат не сжатых данных отличен. Хранятся только непрозрачные или частично прозрачные пикселы, а массивы прозрачных пикселов пропускаются.
-
[[Категория:Технические вопросы]]
+
==== Внутренний формат несжатых данных ====
 +
 
 +
Данные представляют собой массив из индексов цветов и трех управляющих символов:
 +
{|border=1
 +
| Значение
 +
| Действие
 +
|-
 +
| 0
 +
| окончание текущей строки
 +
при этом в новой строке делаем предыдущий отступ плюс некоторое смещение, которое определяется следующим байтом n
 +
{|border=1
 +
| n
 +
| смещение
 +
|-
 +
| 0 .. 249
 +
| n - 125
 +
|-
 +
| 250 .. 255
 +
| то для смещения нужен ещё один добавочный байт m
 +
|-
 +
| 250
 +
| -126 - m
 +
|-
 +
| 251
 +
| -382 - m
 +
|-
 +
| 252
 +
| -638 - m
 +
|-
 +
| 253
 +
| 125 + m
 +
|-
 +
| 254
 +
| 381 + m
 +
|-
 +
| 255
 +
| 637 + m
 +
но если m равно 255, то это означает окончание данных
 +
|}
 +
|-
 +
| 1
 +
| окончание текущей строки
 +
при этом в новой строке делается предыдущий отступ плюс текущее смещение, которое устанавливается каждый раз при появлении нулевого символа в потоке, изначально смещение равно нулю, а изначальный отступ фигурирует в заголовке файла.
 +
|-
 +
| 2
 +
|пропускается часть точек в текущей строке
 +
сколько точек пропускается говорится в следующем байте n
 +
{|border=1
 +
| n
 +
| действие
 +
|-
 +
| 0 .. 251
 +
| пропускается n+1 точек
 +
|-
 +
| 252 .. 255
 +
| читаем следующий байт m
 +
|-
 +
| 252
 +
| пропускаем m + 252 точек
 +
|-
 +
| 253
 +
| пропускаем m + 508 точек
 +
|-
 +
| 254
 +
| пропускаем m + 764 точек
 +
|-
 +
| 255
 +
| пропускаем m + 1020 точек
 +
|}
 +
|-
 +
| 3 .. 255
 +
| цвет текущей точки
 +
|}

Current revision as of 07:49, 7 November 2011

DFP - специальный фрагориский формат для отдельных статических растровых изображений. Большинство статических картинок за исключением пожалуй лишь карт локаций в игре передаются и хранятся в этом формате. Формат удачно подходит для хранения разряженных изображений, где есть большие массивы полностью прозрачных точек.

Как расшифровывается данная аббревиатура остаётся загадкой.

Формат имеет некоторую схожесть с форматом PNG, а так же очень отдаленную с GIF и BMP.

Изображение в формате DFP хранится построчно, поддерживается только формат с индексированой палитрой цветов. Формат поддерживает 256-цветовую палитру, точнее не более 253, так как три первых значения используются для задачи сжатия изображения, подробнее см. раздел Данные.

Contents

Структура Файла

Файл можно разделить на три части:

  1. Заголовок
  2. Палитра
  3. Данные

Заголовок

Заголовок состоит из семи полей

  1. width - ширина картинки (без знаковое целое двух-байтовое число)
  2. height - высота картинки (без знаковое целое двух-байтовое число)
  3. ShiftX - сдвиг по x, влево вправо относительно точки приложения (знаковое двух-байтовое число)
  4. ShiftY - сдвиг по y, вверх вниз, обычно ноль (знаковое двух-байтовое число)
  5. BeginX - начальный сдвиг данных (без знаковое целое двух-байтовое число) нужный для правильной интерпретации раздела данных, фактически количество прозрачных точек в начале первой строки.
  6. PalSize1 - количество цветов в первом части палитры (без знаковое целое одно-байтовое число)
  7. PalSize2 - общее количество цветов в палитре (без знаковое целое одно-байтовое число)

Палитра

Палитра состоит из двух частей:

  • 32 - битной, с Альфа-каналом.
    Данная часть состоит из блоков по 4 байта:
    1. первый байт - альфа канал
    2. второй байт - интенсивность красного
    3. третий байт - интенсивность зеленого
    4. четвертый байт - интенсивность синего
  • 24 - битной, только RGB.
    Данная часть состоит из блоков по 3 байта:
    1. первый байт - интенсивность красного
    2. второй байт - интенсивность зеленого
    3. третий байт - интенсивность синего

Каждый пиксель изображения описан одним байтом, содержащим номер поля палитры, в котором сохранен цвет этого пикселя.

Данные

В начале раздела данных записан его полный размер в файле, 4-ех -байтное без знаковое число.

Данные аналогично формату PNG сжаты алгоритмом DEFLATE, его так же иногда именую zlib, но внутренний формат не сжатых данных отличен. Хранятся только непрозрачные или частично прозрачные пикселы, а массивы прозрачных пикселов пропускаются.

Внутренний формат несжатых данных

Данные представляют собой массив из индексов цветов и трех управляющих символов:

Значение Действие
0 окончание текущей строки

при этом в новой строке делаем предыдущий отступ плюс некоторое смещение, которое определяется следующим байтом n

n смещение
0 .. 249 n - 125
250 .. 255 то для смещения нужен ещё один добавочный байт m
250 -126 - m
251 -382 - m
252 -638 - m
253 125 + m
254 381 + m
255 637 + m

но если m равно 255, то это означает окончание данных

1 окончание текущей строки

при этом в новой строке делается предыдущий отступ плюс текущее смещение, которое устанавливается каждый раз при появлении нулевого символа в потоке, изначально смещение равно нулю, а изначальный отступ фигурирует в заголовке файла.

2 пропускается часть точек в текущей строке

сколько точек пропускается говорится в следующем байте n

n действие
0 .. 251 пропускается n+1 точек
252 .. 255 читаем следующий байт m
252 пропускаем m + 252 точек
253 пропускаем m + 508 точек
254 пропускаем m + 764 точек
255 пропускаем m + 1020 точек
3 .. 255 цвет текущей точки
Personal tools