Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Cannot save 32 bit PSD file from 32 bit BaseBitmap

    Scheduled Pinned Locked Moved SDK Help
    4 Posts 0 Posters 417 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      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!

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          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

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            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!

            1 Reply Last reply Reply Quote 0
            • First post
              Last post