IMcImageGetArea Method
|
|
Get a block of pixel values from the image
Namespace:
MediaCy.IQL.Engine
Assembly:
MediaCy.IQL.Engine (in MediaCy.IQL.Engine.dll) Version: 10.0.6912.0
SyntaxFunction GetArea (
<OutAttribute> ByRef pvArea As Object,
Optional lLeft As Integer = -1,
Optional lTop As Integer = -1,
Optional lRight As Integer = -1,
Optional lBottom As Integer = -1,
Optional Frame As Integer = -2
) As Integer
Parameters
- pvArea
- Type: SystemObject
A pointer to a VARIANT receiving the pixel values.
If the VARIANT is empty, the function will return one containing a
two-dimensional SAFEARRAY (for one channel per pixel) or a three-dimensional
SAFEARRAY (for multiple channels per pixel). If a 2-D array is created, it will
be shaped as vLine(0 to lWidth-1, 0 to lHeight-1) for VB arrays and as
vLine[lHeight][lWidth] for C/C++/Java arrays. If a 2-D array is created, it will
be shaped as vLine(0 to nChannels-1, 0 to lWidth-1, 0 to lHeight-1) for VB
arrays and as vLine[lHeight][lWidth][nChannels] for C/C++/Java arrays.
The number of values contained in the SAFEARRAY is equal to the height
times the width times the number of channels (3 for color images). For
color images, red, green, and blue values are interlaced. - lLeft (Optional)
- Type: SystemInt32
- lTop (Optional)
- Type: SystemInt32
- lRight (Optional)
- Type: SystemInt32
- lBottom (Optional)
- Type: SystemInt32
- Frame (Optional)
- Type: SystemInt32
Return Value
Type:
Int32The number of values returned in the array. Should be
(right - left + 1)*(bottom - top + 1)*image.NumberOfChannels.
RemarksSee CreateRegionAccess for a more controlled way to get pixel values.
When the routine itself creates the array it is typed after the image type,
which guarantees that the pixel values will fit into the array. If pvArea already
contains an array it must be of the right data type and size.
For languages that do not support the unsigned integer type (like Visual Basic or VBA),
16 bits values bigger than 32767 will be reported as negative because their sign bit is set.
The best way to work around this limitation is to create a "long" McRegionAccess using
CreateRegionAccess and call its own version of GetArea, which will then
return long positive values (4 bytes) instead of unsigned integers (2 bytes).
Note |
---|
Avoid using GetArea followed by PutArea to copy large image frames. This
causes the entire image frame being copied to need to reside in memory. Instead
use the IMcRegionAccess.CopyInEntireArea method. Or set up your own per line
loop and use GetLine followed by PutLine (you will need to call
BeginEndUpdateBlock(TRUE/FALSE) around such a loop to avoid excessive image
updating). |
See Also