From cb697523f9de18403abe517e23c417004dbf4d07 Mon Sep 17 00:00:00 2001 From: Joseph Davies Date: Thu, 9 Feb 2012 23:50:55 -0800 Subject: [PATCH] Add PNG support to the VaultImageNode functions. --- Sources/Plasma/PubUtilLib/plVault/Pch.h | 1 + .../PubUtilLib/plVault/plVaultNodeAccess.cpp | 51 ++++++++++++------- .../PubUtilLib/plVault/plVaultNodeAccess.h | 4 +- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Sources/Plasma/PubUtilLib/plVault/Pch.h b/Sources/Plasma/PubUtilLib/plVault/Pch.h index 80663e1f..9b751c76 100644 --- a/Sources/Plasma/PubUtilLib/plVault/Pch.h +++ b/Sources/Plasma/PubUtilLib/plVault/Pch.h @@ -74,6 +74,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com #include "pnDispatch/plDispatch.h" #include "plDniCoordinateInfo.h" #include "plGImage/plMipmap.h" +#include "plGImage/plPNG.h" #include "plJPEG/plJPEG.h" #include "plMessage/plVaultNotifyMsg.h" #include "plNetClientComm/plNetClientComm.h" diff --git a/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.cpp b/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.cpp index 754b6288..47d520aa 100644 --- a/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.cpp +++ b/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.cpp @@ -633,18 +633,30 @@ void VaultImageNode::SetImageData (const uint8_t buffer[], unsigned bytes) { //============================================================================ #ifdef CLIENT -void VaultImageNode::StuffImage (plMipmap * src) { +void VaultImageNode::StuffImage (plMipmap * src, int dstType) { hsRAMStream ramStream; - plJPEG::Instance().SetWriteQuality(30/*percent*/); - if (plJPEG::Instance().WriteToStream(&ramStream, src)) { + hsBool compressSuccess = false; + + switch (dstType) { + case kJPEG: + plJPEG::Instance().SetWriteQuality(70/*percent*/); + compressSuccess = plJPEG::Instance().WriteToStream(&ramStream, src); + break; + case kPNG: + compressSuccess = plPNG::Instance().WriteToStream(&ramStream, src); + break; + default: + break; + } + + if (compressSuccess) { unsigned bytes = ramStream.GetEOF(); uint8_t * buffer = (uint8_t *)malloc(bytes); ramStream.CopyToMem(buffer); IVaultNodeSetBlob(kImageData, base, &imgData, &imgDataLen, buffer, bytes); - SetImageType(kJPEG); + SetImageType(dstType); free(buffer); - } - else { + } else { IVaultNodeSetBlob(kImageData, base, &imgData, &imgDataLen, nil, 0); SetImageType(kNone); } @@ -654,22 +666,25 @@ void VaultImageNode::StuffImage (plMipmap * src) { //============================================================================ #ifdef CLIENT bool VaultImageNode::ExtractImage (plMipmap ** dst) { - + hsRAMStream ramStream; + ramStream.Write(imgDataLen, imgData); + ramStream.Rewind(); + switch (imgType) { + case kJPEG: + (*dst) = plJPEG::Instance().ReadFromStream(&ramStream); + break; + + case kPNG: + (*dst) = plPNG::Instance().ReadFromStream(&ramStream); + break; + case kNone: + default: (*dst) = nil; - return false; - - case kJPEG: { - hsRAMStream ramStream; - ramStream.Write(imgDataLen, imgData); - ramStream.Rewind(); - (*dst) = plJPEG::Instance().ReadFromStream(&ramStream); - } - return ((*dst) != nil); - - DEFAULT_FATAL(imgType); + break; } + return ((*dst) != nil); } #endif diff --git a/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.h b/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.h index 83acd6c3..a15ecccd 100644 --- a/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.h +++ b/Sources/Plasma/PubUtilLib/plVault/plVaultNodeAccess.h @@ -290,7 +290,7 @@ struct VaultAgeLinkNode : NetVaultNodeAccess { //============================================================================ struct VaultImageNode : NetVaultNodeAccess { - enum ImageTypes { kNone=0, kJPEG=1 }; + enum ImageTypes { kNone=0, kJPEG=1, kPNG=2 }; static const uint64_t kImageType = NetVaultNode::kInt32_1; static const uint64_t kImageTitle = NetVaultNode::kString64_1; @@ -310,7 +310,7 @@ struct VaultImageNode : NetVaultNodeAccess { void SetImageData (const uint8_t buffer[], unsigned bytes); #ifdef CLIENT - void StuffImage (class plMipmap * src); + void StuffImage (class plMipmap * src, int dstType=kJPEG); bool ExtractImage (class plMipmap ** dst); #endif };