diff --git a/src/bmp.cpp b/src/bmp.cpp index 544217f51f..0c310c7686 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -10,7 +10,6 @@ #include "stdafx.h" #include "bmp.h" #include "core/bitmath_func.hpp" -#include "core/alloc_func.hpp" #include "core/mem_func.hpp" #include "safeguards.h" @@ -359,8 +358,6 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data) if (info->compression > 2 || (info->compression > 0 && !(info->bpp == 4 || info->bpp == 8))) return false; if (info->bpp <= 8) { - uint i; - /* Reads number of colours if available in info header */ if (header_size >= 16) { SkipBytes(buffer, 12); // skip image size and resolution @@ -374,12 +371,12 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /* More palette colours than palette indices is not supported. */ if (info->palette_size > maximum_palette_size) return false; - data->palette = CallocT(info->palette_size); + data->palette.resize(info->palette_size); - for (i = 0; i < info->palette_size; i++) { - data->palette[i].b = ReadByte(buffer); - data->palette[i].g = ReadByte(buffer); - data->palette[i].r = ReadByte(buffer); + for (auto &colour : data->palette) { + colour.b = ReadByte(buffer); + colour.g = ReadByte(buffer); + colour.r = ReadByte(buffer); if (!info->os2_bmp) SkipBytes(buffer, 1); // unused } } @@ -395,7 +392,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { assert(info != nullptr && data != nullptr); - data->bitmap = CallocT(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); + data->bitmap.resize(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); /* Load image */ SetStreamOffset(buffer, info->offset); @@ -413,10 +410,3 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) default: NOT_REACHED(); } } - -void BmpDestroyData(BmpData *data) -{ - assert(data != nullptr); - free(data->palette); - free(data->bitmap); -} diff --git a/src/bmp.h b/src/bmp.h index 557244e1ee..fa3dd4df8f 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -23,8 +23,8 @@ struct BmpInfo { }; struct BmpData { - Colour *palette; - uint8_t *bitmap; + std::vector palette; + std::vector bitmap; }; #define BMP_BUFFER_SIZE 1024 @@ -40,6 +40,5 @@ struct BmpBuffer { void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file); bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data); bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data); -void BmpDestroyData(BmpData *data); #endif /* BMP_H */ diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 3252c392dc..ad68341687 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -211,7 +211,7 @@ static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data uint x, y; uint8_t gray_palette[256]; - if (data->palette != nullptr) { + if (!data->palette.empty()) { uint i; bool all_gray = true; @@ -267,12 +267,9 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m { FILE *f; BmpInfo info; - BmpData data; + BmpData data{}; BmpBuffer buffer; - /* Init BmpData */ - memset(&data, 0, sizeof(data)); - f = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); if (f == nullptr) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); @@ -284,14 +281,12 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m if (!BmpReadHeader(&buffer, &info, &data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } if (!IsValidHeightmapDimension(info.width, info.height)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } @@ -299,7 +294,6 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m if (!BmpReadBitmap(&buffer, &info, &data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } @@ -307,8 +301,6 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m ReadHeightmapBMPImageData(*map, &info, &data); } - BmpDestroyData(&data); - *x = info.width; *y = info.height;