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);
}
void VideoBuffer::Resize(int width, int height, bool resample)
void VideoBuffer::Resize(int width, int height, bool resample, bool fixedRatio)
{
int newWidth = width;
int newHeight = height;
pixel * newBuffer;
if(newHeight == -1 && newWidth == -1)
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)
newBuffer = Graphics::resample_img(Buffer, Width, Height, newWidth, newHeight);

View File

@ -113,7 +113,7 @@ public:
VideoBuffer(pixel * buffer, int width, int height);
VideoBuffer(int width, int height);
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)
{
#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()
{
RequestBroker::Ref().DetachRequestListener(this);
if(thumbnail)
delete thumbnail;
if(callback)
delete callback;
}

View File

@ -34,6 +34,6 @@ public:
void saveWrite(std::string finalFilename);
virtual void Save();
virtual void OnDraw();
virtual void OnRequestReady(void * imagePtr);
virtual void OnResponseReady(void * imagePtr);
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()
{
RequestBroker::Ref().DetachRequestListener(this);
if(saveUploadTask)
delete saveUploadTask;
if(callback)
delete callback;
if(thumbnail)
delete thumbnail;
}

View File

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