MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / GetBufferFromPixelData

Function GetBufferFromPixelData

src/openrct2-ui/scripting/CustomImages.cpp:266–315  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

264 }
265
266 static std::vector<uint8_t> GetBufferFromPixelData(JSContext* ctx, PixelData& pixelData)
267 {
268 std::vector<uint8_t> imageData;
269 switch (pixelData.Type)
270 {
271 case PixelDataKind::Raw:
272 {
273 auto data = GetDataFromBufferLikeObject(ctx, pixelData.Data);
274 if (pixelData.Stride != pixelData.Width)
275 {
276 // Make sure data is expected size for RemovePadding
277 data.resize(pixelData.Stride * pixelData.Height);
278 data = RemovePadding(data, pixelData);
279 }
280
281 // Make sure data is expected size
282 data.resize(pixelData.Width * pixelData.Height);
283 imageData = std::move(data);
284 break;
285 }
286 case PixelDataKind::Rle:
287 {
288 imageData = GetDataFromBufferLikeObject(ctx, pixelData.Data);
289 break;
290 }
291 case PixelDataKind::Png:
292 {
293 auto imageFormat = pixelData.Palette == PixelDataPaletteKind::Keep ? ImageFormat::png : ImageFormat::png32;
294 auto palette = pixelData.Palette == PixelDataPaletteKind::Keep ? Palette::KeepIndices : Palette::OpenRCT2;
295 auto importMode = getImportModeFromPalette(pixelData.Palette);
296 auto pngData = GetDataFromBufferLikeObject(ctx, pixelData.Data);
297 auto image = Imaging::ReadFromBuffer(pngData, imageFormat);
298 constexpr ImportFlags flags = { ImportFlag::rle };
299 ImageImportMeta meta = { { 0, 0 }, palette, flags, importMode };
300
301 ImageImporter importer;
302 auto importResult = importer.Import(image, meta);
303
304 pixelData.Type = PixelDataKind::Rle;
305 pixelData.Width = importResult.Element.width;
306 pixelData.Height = importResult.Element.height;
307
308 imageData = std::move(importResult.Buffer);
309 break;
310 }
311 default:
312 throw std::runtime_error("Unsupported pixel data type.");
313 }
314 return imageData;
315 }
316
317 static PixelDataKind PixelDataKindFromJS(const std::string& s)
318 {

Callers 1

JSSetPixelDataFunction · 0.85

Calls 5

RemovePaddingFunction · 0.85
getImportModeFromPaletteFunction · 0.85
ReadFromBufferFunction · 0.85
ImportMethod · 0.45

Tested by

no test coverage detected