Четверг, 28.03.2024, 12:42
Приветствую Вас Гость

Каталог статей

Главная » Статьи » S3DecoderLib

S3DecoderLib: Приложение 4. ResourceType THUM, SNAP, ICON, TWNI

Приложение 4: ResourceType THUM, SNAP, ICON, TWNI

 

[ Стабильный билд • Sims3: File Types • Википедия: PNG ]

 

Програмный модуль и версия

DBPF2PNG.pas, rev.120825

 

Краткий обзор

 

Типы данных THUM, SNAP, ICON, TWNI используются для хранения изображений в формате PNG (Portable Network Graphics) – растровом формате хранения графической информации, использующем сжатие без потерь. В The Sims 3 применяется формат RGBA (красный-зеленый-синий-альфа) с глубиной цвета 8 бит на канал (если есть другие варианты, то я не встречал)

 

Идентификация данных

Версия игры

The Sims 3 (DBPF v.2.0)

 

ResourceType

PNG.jpg

 

ResourceGroup

ResourceGroup = $xxxxxxxx

Группа ресурса, по-видимому, является набором флагов

 

Instance

Instance = $yyyyyyyyyyyyyyyy

Экземпляр любой

 

Реализация на Pascal

 

"enum" TDBPF2PNGType - перечисление типов изображений

type
  TDBPF2PNGType = (TS3ResByePNG, TS3ResBldPNG, TS3ResSimPNG, TS3ResFamPNG,
    TS3ResCASPNG, TS3ResLotPNG, TS3ResWrdPNG, TS3ResPatPNG, TS3ResGrdPNG,
    TS3ResPntPNG, TS3ResIntPNG);

set TDBPF2PNGTypes - множество типов изображений

type
  TDBPF2PNGTypes = set of TDBPF2PNGType;
PNGConst.jpg

 

Функции

function IsPNG(AResourceType: DWORD): boolean; overload;
  // возвращает true, если AResourceType - PNG
function IsPNG(AResourceType: DWORD; PNGTypes: TDBPF2PNGTypes): boolean; overload;
  // возвращает true, если AResourceType - PNG входящий во множество PNGTypes

function IsBestPNG(const Decoder: TDBPF2Decoder; Index: integer): boolean;
  // возвращает true, если запись содержит PNG с наилучшим разрешением

В Delphi 2009 работа с форматом PNG поддерживается практически не документированным классом TPNGImage, наследником класса TGraphic. Использование примерно такое:

uses PNGImage, siDBPF2Decoder;

...
var
  DBPF2Decoder: TDBPF2Decoder;
  img: TPNGImage;

...
DBPF2Decoder.Create(nil);
DBPF2Decoder.Decode(...
...
with DBPF2Decoder.Items[i] do begin
  img:= TPNGImage.Create;
  Decode(TMemoryStream.Create);
  Stream.Seek(0, soBeginning); // обязательно встали на начало потока
  try
    img.LoadFromStream(Stream);
    // здесь можно чего-нибудь сделать с рисунком PNG
  except
    on E: Exception do Error(E.Message); // ошибочка вышла
  end;
  FreeStream;
  img.Free
end;
...
DBPF2Decoder.Free;
...
Категория: S3DecoderLib | Добавил: crazylab (27.09.2013)
Просмотров: 672