Page 1 of 1

error message, need some help

Posted: Mon Mar 27, 2006 5:29 pm
by walleye3313
David,

i have gotten the following:

Error in CreateCompatibleBitmap=0x00000008, Size 802x616744

i suspect there is a size issue, can you fill me in on the error and any limitations that i need to work around?

thanks
jerry

Posted: Mon Mar 27, 2006 7:42 pm
by DPlotAdmin
Holy cow! Just when I think I've seen it all... :D

Do you really want a bitmap 616,744 pixels tall??? If so and you don't mind me asking, what in the world are you up to?

The error code 8 maps to "Not enough storage is available to process this command." Not a big surprise, as a bitmap that size on a 24-bit display requires 1,483,886,064 bytes (roughly 1.4 Gb). On NT4 the maximum size is 48Mb. I couldn't find any limitations on 2000 or XP (but didn't spend a lot of time looking). The problem is likely that you simply don't have enough memory.

Posted: Mon Mar 27, 2006 8:33 pm
by walleye3313
LOL,

i had a hunch it was something like that!

now i have an idea where to look in the code. i used the DPM to get the corners of the plot and then use the distance between the corners to size the bitmap. must be an error in the formula or something unexpected in the data, this data came from down near the equator and in the eastern hemisphere.

glad i could make you smile!

thanks
jerry

Posted: Mon Mar 27, 2006 8:49 pm
by walleye3313
i don't see the problem, here is the code i'm using:

Code: Select all

    ' try to get the metrics without drawing the plot
        If (hBitmap <> 0) Then
        ret = DeleteObject(hBitmap)
        hBitmap = 0
    End If
    If DocNum <> 0 Then
        ret = DPlot_Command(DocNum, "[FileClose()]")
    End If
    DocNum = DPlot_Plot(d, 0&, Node(0, 0), cmds)
    If (DocNum > 0) Then
        DPM.SIZE = Len(DPM)
        hBitmap = DPlot_GetBitmapEx(DocNum, 400, 400, DPM)
        ' NOTE: If we want to get Z values from the document (HasMetrics=3), we CANNOT close it.
        ' ret = DPlot_Command(DocNum, "[FileClose()]")
      HasMetrics = 3   ' NOTE: This won't work for 3D, since we can't get X and Y from mouse position
    End If
    Debug.Print "DPM", DPM.xlo, DPM.ylo, DPM.xhi, DPM.yhi
'Stop
 ' end of try for metrics
 
 
Picture1.ScaleWidth = Abs(DPM.xhi - DPM.xlo) ' adjust this to make picture1 the right size
Picture1.ScaleHeight = Abs(DPM.yhi - DPM.ylo)
ret = GetClientRect(Picture1.hwnd, rcPic)
    If (hBitmap <> 0) Then
        ret = DeleteObject(hBitmap)
        hBitmap = 0
    End If
    If DocNum <> 0 Then
        ret = DPlot_Command(DocNum, "[FileClose()]")
    End If
    DocNum = DPlot_Plot(d, 0&, Node(0, 0), cmds)
    If (DocNum > 0) Then
        DPM.SIZE = Len(DPM)
        hBitmap = DPlot_GetBitmapEx(DocNum, Picture1.ScaleWidth, Picture1.ScaleHeight, DPM)
        ' NOTE: If we want to get Z values from the document (HasMetrics=3), we CANNOT close it.
        ' ret = DPlot_Command(DocNum, "[FileClose()]")
      HasMetrics = 3   ' NOTE: This won't work for 3D, since we can't get X and Y from mouse position
    End If
    Call Picture1_Paint

if i toggle in a breakpoint at the line DPM.SIZE=Len(DPM) and i mouse over Picture1.ScaleWidth i get 41, and Picture1.ScaleHeight is 170. which seem like reasonable sizes for bitmaps. do you see anything that might be the problem?

the error hits on the line hBitmap= of course.

on the bright side it seem to work with all of the western hemisphere data i have used, maybe i need to start on an "eastern hemisphere edition" :lol:

thanks
jerry

Posted: Mon Mar 27, 2006 10:47 pm
by DPlotAdmin
I can't explain why you'd get this:
if i toggle in a breakpoint at the line DPM.SIZE=Len(DPM) and i mouse over Picture1.ScaleWidth i get 41, and Picture1.ScaleHeight is 170.
but this:
Picture1.ScaleWidth = Abs(DPM.xhi - DPM.xlo)
Picture1.ScaleHeight = Abs(DPM.yhi - DPM.ylo)
for sure isn't what you mean to do. Those values are in data space, not pixels. So depending on what you're plotting xhi-xlo might be much less than 1 or it might be 10 million. Instead you want hll, hur, vll, vur. Keep in mind that those are the pixel values of the corners of the plot, though - not the extents of the entire plot. So this still may not be quite what you have in mind.

Posted: Tue Mar 28, 2006 10:20 am
by walleye3313
Keep in mind that those are the pixel values of the corners of the plot, though - not the extents of the entire plot. So this still may not be quite what you have in mind.

i don't know what you mean by "not the extents of the entire plot." do you mean that it give the corners of the plot but not the entire bitmap? i just tried that out, yes the bitmap IS bigger than the plot! when i say plot i mean the actual portion of the plane that is being represented, rather than the bitmap.

what i am trying to do is request a plot of the right size (in pixels) so that when i display the plot on the screen:

1. i know the scale of the bitmap (in meters per pixel) the fact that the bitmap is bigger than the plotted area will not matter because it is all colored white and so it will be ignored

2. i know the coordinates of the upper left pixel, or some other pixel, so that i can scan the pixels and know "where" i am at on the plane.

3. the scale for x is the same as the scale for y such as provided by [ContourScales(1,1,1)]

Keep in mind that those are the pixel values of the corners of the plot
what do you mean by pixel values? would hll tell me how many pixels in from the left edge of the bitmap the lower left corner of the plot is and similarly for the rest? if so that will allow me to get a scale of the bitmap and i can re-scale it to give the resolution i need for the output.

i don't think we have figured out where the error came from, but i'm not worried about the error anymore because i don't think i have the scale right just yet.

thanks
jerry

Posted: Tue Mar 28, 2006 10:28 am
by walleye3313
Ok, i posted that so you could read what some of my thinking has been.

so if i use the hll, vll etc, to determine the pixel locations of the corners of the plot then is there a way to get the x and y values of the same corners? (or can i force them to be some x and y values that i want by using [ManualScale(xlo,ylo,xhi,yhi |,zlo,zhi | )] so that i can then match up the pixel locations to x,y pairs and scale from there, I THINK THAT MAY BE THE ANSWER!)

if so then i can determine the scale of the plot and resize as needed to give me ~1 meter per pixel and to get the ocordinates of each pixel. i do see that the bitmap is larger than the plot but that won't be an issue in terms of final data because the hll, etc. will allow me to be sure not to look outside of the actual plot.

thanks for rabling through this with me.

jerry

edit:

suppose i do this:

call the plot once to get the DPM.xhi, etc.

then replot using [ManualScale(DPM.xlo,DPM.ylo,DPM.xhi,DPM.yhi )]

i should then get a plot where the lower left corner coordinates in pixels (hll,vll) is the location of (DPM.xlo,DPM.ylo) and likewise for the upper left. and i can scale from there for any pixel. i could also then determine the scale in meters per pixel using [(DPM.xhi-DPM.xlo)/(hur-hll)].

Posted: Tue Mar 28, 2006 11:09 am
by DPlotAdmin
While you can do this:
suppose i do this:

call the plot once to get the DPM.xhi, etc.

then replot using [ManualScale(DPM.xlo,DPM.ylo,DPM.xhi,DPM.yhi )]
... it shouldn't be necessary. You're setting the corner coordinates to their current values. No change, in other words.

Only that's not always quite right because we're talking two different devices. So nevermind. Yes, that will work.
i could also then determine the scale in meters per pixel using [(DPM.xhi-DPM.xlo)/(hur-hll)].
I know you know, but just so somebody else doesn't read this and get the wrong idea: the above is true because your X and Y values are in meters.

Posted: Tue Mar 28, 2006 12:11 pm
by walleye3313
Maybe I finally get it, sometimes i need things to be painfully obvious,
:oops:
I'll play around with this some more and see what happens, i'l try using the metrics to scale and see of the results are what i expect.

thanks again,
jerry