Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: PixelBuffer.cpp
- Revision:
- 32:64c391617f6c
- Parent:
- 29:a362df191524
- Child:
- 34:5a141ed5d52a
--- a/PixelBuffer.cpp Tue Sep 13 12:04:51 2016 +0000
+++ b/PixelBuffer.cpp Thu Oct 13 23:51:20 2016 +0000
@@ -8,6 +8,8 @@
*/
#include "PixelBuffer.h"
+#define USE_MALLOC 1 // 0:new, 1:malloc
+
//----------------------------------------------------------------------------
// 指定されたバッファの先頭からblock_size分をbuf_sizeが満杯になるまで繰り返しコピーする
template <class T>
@@ -30,14 +32,14 @@
//----------------------------------------------------------------------------
RGBPixels::RGBPixels(RGBColor *buffer, int maxPixels)
- : _buf_owner(false)
+ : _owned_buffer(false)
{
_dummyPixel = 0;
setPixelBuffer(buffer, maxPixels);
}
RGBPixels::RGBPixels(int maxPixels)
- : _buf_owner(false)
+ : _owned_buffer(false)
{
_dummyPixel = 0;
setPixelBuffer(nullptr, maxPixels);
@@ -45,23 +47,35 @@
RGBPixels::~RGBPixels()
{
- if (_buf_owner && _pixels)
- delete[] _pixels;
+ setPixelBuffer(0, 0);
}
void RGBPixels::setPixelBuffer(RGBColor *buffer, int maxPixels)
{
- if (_buf_owner && _pixels)
+ if (_owned_buffer && _pixels)
+ {
+#if USE_MALLOC
+ free(_pixels);
+#else
delete[] _pixels;
+#endif
+ }
+ _owned_buffer = false;
+ _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
+ _pixels = (!_maxPixels) ? NULL : buffer;
- _buf_owner = false;
- _pixels = buffer;
-
- _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
if (!_pixels && _maxPixels > 0)
{
+#if USE_MALLOC
+ _pixels = static_cast<RGBColor*>(malloc(sizeof(RGBColor)*_maxPixels));
+ if (_pixels)
+ _owned_buffer = true;
+ else
+ _maxPixels = 0;
+#else
_pixels = new RGBColor[_maxPixels];
- _buf_owner = true;
+ _owned_buffer = true;
+#endif
}
_numPixels = _maxPixels;
clear();
@@ -222,14 +236,14 @@
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
HSVPixels::HSVPixels(HSVColor *buffer, int maxPixels)
- : _buf_owner(false)
+ : _owned_buffer(false)
{
_dummyPixel = 0;
setPixelBuffer(buffer, maxPixels);
}
HSVPixels::HSVPixels(int maxPixels)
- : _buf_owner(false)
+ : _owned_buffer(false)
{
_dummyPixel = 0;
setPixelBuffer(nullptr, maxPixels);
@@ -237,23 +251,35 @@
HSVPixels::~HSVPixels()
{
- if (_buf_owner && _pixels)
- delete[] _pixels;
+ setPixelBuffer(0, 0);
}
void HSVPixels::setPixelBuffer(HSVColor *buffer, int maxPixels)
{
- if (_buf_owner && _pixels)
+ if (_owned_buffer && _pixels)
+ {
+#if USE_MALLOC
+ free(_pixels);
+#else
delete[] _pixels;
+#endif
+ }
+ _owned_buffer = false;
+ _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
+ _pixels = (!_maxPixels) ? NULL : buffer;
- _buf_owner = false;
- _pixels = buffer;
-
- _maxPixels = (maxPixels < 0) ? 0 : (maxPixels > MAX_PIXELS) ? MAX_PIXELS : maxPixels;
if (!_pixels && _maxPixels > 0)
{
+#if USE_MALLOC
+ _pixels = static_cast<HSVColor*>(malloc(sizeof(HSVColor)*_maxPixels));
+ if (_pixels)
+ _owned_buffer = true;
+ else
+ _maxPixels = 0;
+#else
_pixels = new HSVColor[_maxPixels];
- _buf_owner = true;
+ _owned_buffer = true;
+#endif
}
_numPixels = _maxPixels;
clear();