Cannot save 32 bit PSD file from 32 bit BaseBitmap
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 23/03/2010 at 17:04, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 11.514
Platform:
Language(s) : C++ ;---------
Hi Everyone,I have a plugin that loads a 32 bit tif, but cannot save it as a 32 bit PSD file. Here's the body of the Execute method:
Bool testPluginCmd::Execute(BaseDocument *doc) { String tifPath("~/rawtex/face_tg.tif"); String psdPath("~/rawtex/face_tg.psd"); BaseBitmap *psdSaver = BaseBitmap::Alloc(); if (!psdSaver || psdSaver->Init(tifPath) != IMAGE_OK) { GePrint("Fatal: could not load " + tifPath); BaseBitmap::Free(psdSaver); psdSaver = NULL; } GePrint("File " + tifPath + " is a"); if (psdSaver->GetBt() == 96) { // This prints out, so the file is properly loaded as 32 bits GePrint(" 32-bit image"); } else if (psdSaver->GetBt() == 48) { GePrint(" 16-bit image"); } else if (psdSaver->GetBt() == 24) { GePrint(" 8-bit image"); } else { GePrint("Cannot determine bit depth for loaded tif file: " + tifPath); } if (psdSaver && psdSaver->Save(psdPath, FILTER_PSD, NULL, 0) != IMAGE_OK) { GePrint("Fatal: could not convert " + tifPath + " to PSD file"); } BaseBitmap *psdLoader = BaseBitmap::Alloc(); if (!psdLoader || psdLoader->Init(psdPath) != IMAGE_OK) { GePrint("Fatal: could not load " + psdPath); BaseBitmap::Free(psdLoader); psdLoader = NULL; } GePrint("File " + psdPath + " is a"); if (psdLoader->GetBt() == 96) { GePrint(" 32-bit image"); } else if (psdLoader->GetBt() == 48) { GePrint(" 16-bit image"); } else if (psdLoader->GetBt() == 24) { // This prints, the PSD file is 8 bit GePrint(" 8-bit image"); } else { GePrint("Cannot determine bit depth for loaded psd file: " + psdPath); } BaseBitmap::Free(psdLoader); return TRUE; }
When the plugin is executed, the tif file is properly loaded into the BaseBitmap and GetBt() returns 96, which indicates a 32 bit image.
When the BaseBitmap is saved as FILTER_PSD, the Save method returns IMAGE_OK, so BaseBitmap::Save is successfully writing the image.
However, when the saved PSD file is loaded, the GetBt method returns 24, indicating an 8 bit image. If the PSD file is loaded into PhotoShop, PhotoShop also reports an 8 bit image.
What am I donig wrong? Any help greatly appreciated, thanks!
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 23/03/2010 at 20:51, xxxxxxxx wrote:
...
if (psdSaver && psdSaver->Save(psdPath, FILTER_PSD, NULL, 0 ) != IMAGE_OK)
...What am I donig wrong?
Well, as loading in Photoshop demonstrated, you saved your file as 8-bit. So the call to the Save method should have been the first suspect. Indeed a quick check in the SDK docs revealed that you likely should set the parameter savebits to something different than 0
I haven't tested it, but this should work:
if (psdSaver && psdSaver->Save(psdPath, FILTER_PSD, NULL, SAVEBIT_32b**chANNELS ) != IMAGE_OK)Hope it helps
Kabe
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 23/03/2010 at 20:55, xxxxxxxx wrote:
Political correct constant names
This made my day!
Kabe
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 24/03/2010 at 10:24, xxxxxxxx wrote:
Oh I see, I misread the documentation. I read the documentation for the "data" parameter, then saw the section on return values and assumed that was the end of it.
Thanks!