1 /**
2 * Copyright (c) 2006-2016 LOVE Development Team
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 *
8 * Permission is granted to anyone to use this software for any purpose,
9 * including commercial applications, and to alter it and redistribute it
10 * freely, subject to the following restrictions:
11 *
12 * 1. The origin of this software must not be misrepresented; you must not
13 * claim that you wrote the original software. If you use this software
14 * in a product, an acknowledgment in the product documentation would be
15 * appreciated but is not required.
16 * 2. Altered source versions must be plainly marked as such, and must not be
17 * misrepresented as being the original software.
18 * 3. This notice may not be removed or altered from any source distribution.
19 **/
20
21 #include "CompressedImageData.h"
22
23 namespace love
24 {
25 namespace image
26 {
27 namespace magpie
28 {
29
CompressedImageData(std::list<CompressedFormatHandler * > formats,love::filesystem::FileData * filedata)30 CompressedImageData::CompressedImageData(std::list<CompressedFormatHandler *> formats, love::filesystem::FileData *filedata)
31 {
32 CompressedFormatHandler *parser = nullptr;
33
34 for (CompressedFormatHandler *handler : formats)
35 {
36 if (handler->canParse(filedata))
37 {
38 parser = handler;
39 break;
40 }
41 }
42
43 if (parser == nullptr)
44 throw love::Exception("Could not parse compressed data: Unknown format.");
45
46 data = parser->parse(filedata, dataImages, dataSize, format, sRGB);
47
48 if (data == nullptr)
49 throw love::Exception("Could not parse compressed data.");
50
51 if (format == FORMAT_UNKNOWN)
52 {
53 delete[] data;
54 throw love::Exception("Could not parse compressed data: Unknown format.");
55 }
56
57 if (dataImages.size() == 0 || dataSize == 0)
58 {
59 delete[] data;
60 throw love::Exception("Could not parse compressed data: No valid data?");
61 }
62 }
63
~CompressedImageData()64 CompressedImageData::~CompressedImageData()
65 {
66 delete[] data;
67 }
68
69 } // magpie
70 } // image
71 } // love
72