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

    Bitmap gets mangled if pluggin moved around

    Scheduled Pinned Locked Moved PYTHON Development
    6 Posts 0 Posters 434 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

      On 18/06/2014 at 14:56, xxxxxxxx wrote:

      I'm drawing a bitmap to a user-area, but the image can get messed up if the dialogue window is dragged partially offscreen.  See pic: image
      Hmm....the picture doesn't display below.  Can't you post images to this forum?

      I can use re-draw to clean-up the image, but I can't find any system messages inside C4D that occur because a dialogue window is dragged around that I can use to trigger the re-draw.

      Anyone know how to avoid this problem?

      Thanks

      Edit by NiklasR: Fixed image display, Edit 2 by NiklasR: Ok strange, it displayed in the WYSIWYG editor 😉

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

        On 19/06/2014 at 08:11, xxxxxxxx wrote:

        Hi terrachild,

        can you please show the code you use to draw the bitmap?

        -Niklas

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

          On 19/06/2014 at 13:40, xxxxxxxx wrote:

          Here is the draw function:

                     
              def DrawMsg(self, x1, y1, x2, y2, msg) :
                    w, h    = self._bmp.GetSize()
                    destination = w, h
                       
                    drawType = c4d.BMP_NORMAL
                    self._bmp = camera_image_1
                         
                    self.DrawBitmap(
                    self._bmp,
                    x1, y1, destination[0], destination[1],
                    0, 0, w, h, c4d.BMP_NORMAL | c4d.BMP_ALLOWALPHA
                    )
            
          
          

          Also, I haven't been able to get an image drawn (.png) that displays the alpha.
          Is there a trick to getting transparency to work properly?

          Thanks

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

            On 19/06/2014 at 19:17, xxxxxxxx wrote:

            I can not reproduce this. What I tried:

            import c4d
              
            class UserArea(c4d.gui.GeUserArea) :
                
                def __init__(self, bmp) :
                    super(UserArea, self).__init__()
                    self.bmp = bmp
                
                def DrawMsg(self, x1, y1, x2, y2, msg) :
                    self.SetClippingRegion(x1, y1, x2, y2)
                    if not self.bmp:
                        self.SetPen(c4d.COLOR_BG)
                        self.DrawRectangle(x1, y1, x2, y2)
                        return
                    
                    w, h = self.bmp.GetSize()
                    self.DrawBitmap(
                            self.bmp, x1, y1, w, h, x1, y1, w, h,
                            c4d.BMP_NORMAL | c4d.BMP_ALLOWALPHA)
                
            class Dialog(c4d.gui.GeDialog) :
                
                def __init__(self) :
                    super(Dialog, self).__init__()
                    self.ua = UserArea(None)
                
                def CreateLayout(self) :
                    self.AddUserArea(1000, c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, c4d.BFV_SCALEFIT)
                    self.AttachUserArea(self.ua, 1000)
                    return True
              
            def main() :
                fn = c4d.storage.LoadDialog()
                if not fn:
                    return
                dlg = Dialog()
                dlg.ua.bmp = c4d.bitmaps.BaseBitmap()
                dlg.ua.bmp.InitWith(fn)
                dlg.Open(c4d.DLG_TYPE_ASYNC)
                
                # Just make sure the dialog stays alive, nasty hack
                # and should not be done in production.
                c4d.__dlg = dlg
              
            if __name__ == "__main__":
                main()
            

            Does this version work for you?
            Need to check on the alpha.

            -Niklas

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

              On 23/06/2014 at 17:33, xxxxxxxx wrote:

              I tried that by running it in the 'Script Manager' and the same thing happens to the image if you drag the dialogue off the edge of your desktop, and then drag it back.  The image gets mangled.

              Also, what is this line doing, and why should it be avoided in production?

              c4d.__dlg = dlg
              
              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                On 23/06/2014 at 20:32, xxxxxxxx wrote:

                I did get the 'alpha' to work a little bit.

                When you draw an image with an 'alpha' channel, it draws with the dialogue color where the transparency is.

                But if you try to draw one image with transparency on top of another image with transparency it doesn't work.  The image on top has the dialogue color in the transparent parts not the underlying image.

                Anyone ever tried this?

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