mirror of
https://github.com/love2d/love.git
synced 2026-08-19 12:14:20 +02:00
Added an optional third argument to the width/height variant of love.image.newImageData. The new argument is a string containing raw byte pixel data to copy to the new ImageData (e.g. the result of a previous ImageData:getString with an ImageData of the same width and height..)
This commit is contained in:
@@ -391,7 +391,7 @@ public:
|
|||||||
void circle(DrawMode mode, float x, float y, float radius, int points = 10);
|
void circle(DrawMode mode, float x, float y, float radius, int points = 10);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draws an eclipse using the specified arguments.
|
* Draws an ellipse using the specified arguments.
|
||||||
* @param mode The mode of drawing (line/filled).
|
* @param mode The mode of drawing (line/filled).
|
||||||
* @param x X-coordinate of center
|
* @param x X-coordinate of center
|
||||||
* @param y Y-coordinate of center
|
* @param y Y-coordinate of center
|
||||||
|
|||||||
@@ -44,9 +44,26 @@ int w_newImageData(lua_State *L)
|
|||||||
if (w <= 0 || h <= 0)
|
if (w <= 0 || h <= 0)
|
||||||
return luaL_error(L, "Invalid image size.");
|
return luaL_error(L, "Invalid image size.");
|
||||||
|
|
||||||
|
size_t numbytes = 0;
|
||||||
|
const char *bytes = nullptr;
|
||||||
|
|
||||||
|
if (!lua_isnoneornil(L, 3))
|
||||||
|
bytes = luaL_checklstring(L, 3, &numbytes);
|
||||||
|
|
||||||
ImageData *t = nullptr;
|
ImageData *t = nullptr;
|
||||||
luax_catchexcept(L, [&](){ t = instance()->newImageData(w, h); });
|
luax_catchexcept(L, [&](){ t = instance()->newImageData(w, h); });
|
||||||
|
|
||||||
|
if (bytes)
|
||||||
|
{
|
||||||
|
if (numbytes != t->getSize())
|
||||||
|
{
|
||||||
|
t->release();
|
||||||
|
return luaL_error(L, "The size of the raw byte string must match the ImageData's actual size in bytes.");
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(t->getData(), bytes, t->getSize());
|
||||||
|
}
|
||||||
|
|
||||||
luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t);
|
luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t);
|
||||||
t->release();
|
t->release();
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user