From 28ae0cbee6d6bef05e17cf940f9f2176745341cb Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 25 Jun 2016 10:48:54 +0100 Subject: [PATCH] add image table reading --- src/object/ImageTable.cpp | 37 ++++++++++++++++++++++++++++++++++++- src/object/ImageTable.h | 13 +++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/object/ImageTable.cpp b/src/object/ImageTable.cpp index 9a20b42abc..ebd877dbd7 100644 --- a/src/object/ImageTable.cpp +++ b/src/object/ImageTable.cpp @@ -14,9 +14,44 @@ *****************************************************************************/ #pragma endregion +#include "../core/IStream.hpp" +#include "../core/Memory.hpp" #include "ImageTable.h" +ImageTable::~ImageTable() +{ + Memory::Free(_data); + _data = nullptr; + _dataSize = 0; +} + void ImageTable::Read(IStream * stream) { - // TODO + uint32 numImages = stream->ReadValue(); + uint32 imageDataSize = stream->ReadValue(); + + _dataSize = imageDataSize; + _data = Memory::Reallocate(_data, _dataSize); + + // Read g1 element headers + uintptr_t imageDataBase = (uintptr_t)_data; + for (uint32 i = 0; i < numImages; i++) + { + rct_g1_element g1Element; + + uintptr_t imageDataOffset = (uintptr_t)stream->ReadValue(); + g1Element.offset = (uint8*)(imageDataBase + imageDataOffset); + + g1Element.width = stream->ReadValue(); + g1Element.height = stream->ReadValue(); + g1Element.x_offset = stream->ReadValue(); + g1Element.y_offset = stream->ReadValue(); + g1Element.flags = stream->ReadValue(); + g1Element.zoomed_offset = stream->ReadValue(); + + _entries.push_back(g1Element); + } + + // Read g1 element data + stream->Read(_data, _dataSize); } diff --git a/src/object/ImageTable.h b/src/object/ImageTable.h index 30cf7ae5d6..5514694fb4 100644 --- a/src/object/ImageTable.h +++ b/src/object/ImageTable.h @@ -16,12 +16,25 @@ #pragma once +#include #include "../common.h" +extern "C" +{ + #include "../drawing/drawing.h" +} + interface IStream; class ImageTable { +private: + std::vector _entries; + void * _data = nullptr; + size_t _dataSize = 0; + public: + ~ImageTable(); + void Read(IStream * stream); }; \ No newline at end of file