From 281f8feabffd69928a0a0f08aa31f70b36f5e6bd Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 3 Nov 2018 21:11:41 +0800 Subject: =?UTF-8?q?*=E5=A2=9E=E5=8A=A0=E6=B8=B8=E6=88=8F=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Graphics/je_bitmap.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src/libjin/Graphics/je_bitmap.cpp') diff --git a/src/libjin/Graphics/je_bitmap.cpp b/src/libjin/Graphics/je_bitmap.cpp index c11028f..711b8b5 100644 --- a/src/libjin/Graphics/je_bitmap.cpp +++ b/src/libjin/Graphics/je_bitmap.cpp @@ -1,6 +1,7 @@ #define STB_IMAGE_IMPLEMENTATION #include "stb/stb_image.h" +#include "../common/je_exception.h" #include "../filesystem/je_asset_database.h" #include "../math/je_math.h" @@ -35,8 +36,11 @@ namespace JinEngine return nullptr; int w, h; void* data = stbi_load_from_memory((unsigned char *)imgData, size, &w, &h, NULL, STBI_rgb_alpha); - if (data == nullptr) - return nullptr; + if (data == nullptr) + { + throw Exception("Could not create bitmap from image data."); + return nullptr; + } Bitmap* bitmap = new Bitmap(); bitmap->pixels = (Color*)data; bitmap->width = w; @@ -73,6 +77,8 @@ namespace JinEngine width = w; height = h; pixels = new Color[w*h]; + if (pixels == nullptr) + throw Exception("Not enough memory."); } Bitmap::~Bitmap() @@ -94,6 +100,8 @@ namespace JinEngine if (pixels != nullptr) delete[] pixels; pixels = new Color[w*h]; + if (pixels == nullptr) + throw Exception("Not enough memory."); size_t s = w * h * sizeof(Color); memcpy(pixels, p, s); width = w; @@ -106,6 +114,8 @@ namespace JinEngine return; if (without(x, 0, width - 1) || without(y, 0, height - 1)) return; + if (x + y * width >= width * height) + throw Exception("Pixel <%d, %d> of bitmap is out of range.", x, y); pixels[x + y * width] = c; } @@ -114,7 +124,8 @@ namespace JinEngine if (pixels != nullptr) delete[] pixels; pixels = new Color[w*h]; - size_t s = w * h * sizeof(Color); + if (pixels == nullptr) + throw Exception("Not enough memory."); width = w; height = h; for (int x = 0; x < w; ++x) @@ -126,8 +137,10 @@ namespace JinEngine } } - void Bitmap::setPixels(Color* p) + void Bitmap::setPixels(Color* p, int count) { + if (count > width * height) + throw Exception("Pixels are out of range."); size_t s = width * height * sizeof(Color); memcpy(pixels, p, s); } -- cgit v1.1-26-g67d0