Nicer resize method for VideoBuffer, fix Local and Server save previews

This commit is contained in:
Simon Robertshaw
2013-03-16 11:20:11 +00:00
parent ca9ea8bb8a
commit 0646b7fe41
6 changed files with 34 additions and 13 deletions

View File

@@ -50,20 +50,30 @@ void VideoBuffer::Resize(float factor, bool resample)
Resize(newWidth, newHeight); Resize(newWidth, newHeight);
} }
void VideoBuffer::Resize(int width, int height, bool resample) void VideoBuffer::Resize(int width, int height, bool resample, bool fixedRatio)
{ {
int newWidth = width; int newWidth = width;
int newHeight = height; int newHeight = height;
pixel * newBuffer; pixel * newBuffer;
if(newHeight == -1 && newWidth == -1) if(newHeight == -1 && newWidth == -1)
return; return;
if(newHeight == -1) if(newHeight == -1 || newWidth == -1)
{ {
newHeight = ((float)Height)*((float)newWidth/(float)Width); if(newHeight == -1)
newHeight = ((float)Height)*((float)newWidth/(float)Width);
if(newWidth == -1)
newWidth = ((float)Width)*((float)newHeight/(float)Height);
} }
if(newWidth == -1) else if(fixedRatio)
{ {
newWidth = ((float)Width)*((float)newHeight/(float)Height); //Force proportions
float scaleFactor = 1.0f;
if(Height > newHeight)
scaleFactor = ((float)newHeight)/((float)Height);
if(Width > newWidth)
scaleFactor = ((float)newWidth)/((float)Width);
newWidth = ((float)Width)*scaleFactor;
newHeight = ((float)Height)*scaleFactor;
} }
if(resample) if(resample)
newBuffer = Graphics::resample_img(Buffer, Width, Height, newWidth, newHeight); newBuffer = Graphics::resample_img(Buffer, Width, Height, newWidth, newHeight);

View File

@@ -113,7 +113,7 @@ public:
VideoBuffer(pixel * buffer, int width, int height); VideoBuffer(pixel * buffer, int width, int height);
VideoBuffer(int width, int height); VideoBuffer(int width, int height);
void Resize(float factor, bool resample = false); void Resize(float factor, bool resample = false);
void Resize(int width, int height, bool resample = false); void Resize(int width, int height, bool resample = false, bool fixedRatio = true);
TPT_INLINE void BlendPixel(int x, int y, int r, int g, int b, int a) TPT_INLINE void BlendPixel(int x, int y, int r, int g, int b, int a)
{ {
#ifdef PIX32OGL #ifdef PIX32OGL

View File

@@ -128,12 +128,18 @@ void LocalSaveActivity::OnDraw()
} }
} }
void LocalSaveActivity::OnRequestReady(void * imagePtr) void LocalSaveActivity::OnResponseReady(void * imagePtr)
{ {
this->thumbnail = (VideoBuffer*)imagePtr; if(thumbnail)
delete thumbnail;
thumbnail = (VideoBuffer*)imagePtr;
} }
LocalSaveActivity::~LocalSaveActivity() LocalSaveActivity::~LocalSaveActivity()
{ {
RequestBroker::Ref().DetachRequestListener(this);
if(thumbnail)
delete thumbnail;
if(callback)
delete callback;
} }

View File

@@ -34,6 +34,6 @@ public:
void saveWrite(std::string finalFilename); void saveWrite(std::string finalFilename);
virtual void Save(); virtual void Save();
virtual void OnDraw(); virtual void OnDraw();
virtual void OnRequestReady(void * imagePtr); virtual void OnResponseReady(void * imagePtr);
virtual ~LocalSaveActivity(); virtual ~LocalSaveActivity();
}; };

View File

@@ -249,15 +249,20 @@ void ServerSaveActivity::OnDraw()
} }
} }
void ServerSaveActivity::OnRequestReady(void * imagePtr) void ServerSaveActivity::OnResponseReady(void * imagePtr)
{ {
this->thumbnail = (VideoBuffer *)imagePtr; if(thumbnail)
delete thumbnail;
thumbnail = (VideoBuffer *)imagePtr;
} }
ServerSaveActivity::~ServerSaveActivity() ServerSaveActivity::~ServerSaveActivity()
{ {
RequestBroker::Ref().DetachRequestListener(this);
if(saveUploadTask) if(saveUploadTask)
delete saveUploadTask; delete saveUploadTask;
if(callback) if(callback)
delete callback; delete callback;
if(thumbnail)
delete thumbnail;
} }

View File

@@ -29,7 +29,7 @@ public:
virtual void Save(); virtual void Save();
virtual void Exit(); virtual void Exit();
virtual void OnDraw(); virtual void OnDraw();
virtual void OnRequestReady(void * imagePtr); virtual void OnResponseReady(void * imagePtr);
virtual void OnTick(float dt); virtual void OnTick(float dt);
virtual ~ServerSaveActivity(); virtual ~ServerSaveActivity();
protected: protected: