picture.graphics property is nil

  1. 11 months ago

    Bill

    27 Jul 2018 Pre-Release Testers, Xojo Pro Longview Texas

    Found a couple of older threads that looked promising from the title but didn't answer my problem. So here's the detail:

    Mac Pro Late 2013 with macOS 10.12.6 Sierra
    Xojo 2017 R3

    I have a program that works perfectly that has a canvas I can drop a jpg file onto, it resizes appropriately and displays the image in the canvas.

    I have a new program that I want to do the exact same thing so I copy and pasted the Canvas to the new app along with the Resize method and the File Type specification.

    The Open event of the canvas contains:

    Me.AcceptPictureDrop
    Me.AcceptFileDrop("image/jpeg")

    The DropObject event contains:

    Dim pPictureIn  As Picture
    
    If Obj.PictureAvailable Then
      pPictureIn  = obj.Picture
    Elseif Obj.FolderItemAvailable Then
      pPictureIn = Picture.Open(obj.FolderItem)
    End If
    
    Me.backdrop  = ResizeToFit(pPictureIn, 135, 175)
    
    Return

    There is apparently no problem here because the method that is called (ResizeToFit) receives a picture containing the correct image.

    The ResizeToFit method contains:

    Dim Hin   As Integer
    Dim Win   As Integer
    Dim ratio As Double
    
    Hin = p.Height
    Win = p.Width
    
    ratio = Win / Hin
    
    Dim w1 As Integer = maxWidth
    Dim h1 As Integer = w1 / ratio
    
    Dim h2 As Integer = maxHeight
    Dim w2 As Integer = h2 * ratio
    
    Dim useWidth, useHeight As Integer
    
    If h1 > maxHeight Then
      useWidth = w2
      useHeight = h2
      
    Elseif w2 > maxWidth Then
      useWidth = w1
      useHeight = h1
      
    Elseif ( maxHeight - h1 ) < ( maxWidth - w2 ) Then
      useWidth = w1
      useHeight = h1
      
    Else
      useWidth = w2
      useHeight = h2
      
    End If
    
    Dim newPict As New Picture( useWidth, useHeight, p.Depth )
    newPict.Graphics.DrawPicture( p, 0, 0, newPict.Width, newPict.Height, 0, 0, p.Width, p.Height )  ***(nil exception here)***
    
    Return newPict

    Here's a list of property values for "p" which is the picture passed from the canvas event and for the newPict which should be the resized picture but I get a nil exception

    The following values were obtained by dropping the exact same file from the same location onto the 2 different apps.

    The original dropped image:

    In app that is working In app that isn’t working
    p p

    Depth 32 0
    Graphics graphics nil
    HasAlphaChannel false true
    Height 350 350
    HorizontalResolution 72 72
    ImageCount 0 0
    Objects nil nil
    RGBSurface RGBSurface RGBSurface
    Transparent 0 0
    Type MutableBitmap = 2 ImmutableBitmap = 3
    VerticalResolution 72 72
    Width 473 473

    what should be the resized imaged:

    In app that is working In app that isn’t working
    newPict newPict

    Depth 32 0
    Graphics graphics nil
    HasAlphaChannel false false
    Height 99 99
    HorizontalResolution 72 72
    ImageCount 0 0
    Objects nil Group2D
    RGBSurface RGBSurface nil
    Transparent 0 0
    Type MutableBitmap = 2 Vector = 1
    VerticalResolution 72 72
    Width 135 135

    Try turning off the Supports HiDPI Shared Setting.

  2. Bill

    27 Jul 2018 Pre-Release Testers, Xojo Pro Longview Texas

    sorry but the forum software reformatted my values list. In any case the 1st value after the property name is the working app and the second is the non-working app.

  3. Greg O

    27 Jul 2018 Xojo Inc Answer

    Try turning off the Supports HiDPI Shared Setting.

  4. Sam R

    27 Jul 2018 Pre-Release Testers, Xojo Pro Hengchun, Pingtung, Taiwan

    Don't set the depth when creating a new picture.

    Dim destination as new picture( destWidth, destHeight )
  5. Beatrix W

    27 Jul 2018 Pre-Release Testers Europe (Germany)

    For 90% of HiDPI drawing you can forget that you do HiDPI. Here things become a bit more complicated. You need to create a mutable picture out of an immutable one. See http://docs.xojo.com/index.php/Picture.CopyColorChannels .

  6. Jeff T

    27 Jul 2018 Pre-Release Testers Midlands of England, Europe

    Based on the properties, my money is on this:

    Objects nil Group2D
    Type MutableBitmap = 2 Vector = 1

    Im guessing this image has no bitmap component, just some drawing instructions, so there is no picture to copy?
    But Beatrix's idea looks worth a try.

  7. Greg O

    28 Jul 2018 Xojo Inc

    Another possibility... what are useWidth and UseHeight? It’s possible that initialization of newPict failed outright.

  8. Bill

    28 Jul 2018 Pre-Release Testers, Xojo Pro Longview Texas

    Always know I will get an answer here. Thanks everyone. I simply turned off the Supports HiDPI and it worked perfectly.

    thanks again.

  9. 2 weeks ago

or Sign Up to reply!