LEADTOOLS (Leadtools assembly)
LEAD Technologies, Inc

SetUserData Method

Example 





Pointer to the unmanaged memory buffer containing the image new data.
Number of bytes in data.
Sets the data for the image to the specified unmanaged memory buffer. .NET support WinRT support
Syntax
public void SetUserData( 
   IntPtr data,
   long size
)
'Declaration
 
Public Sub SetUserData( _
   ByVal data As IntPtr, _
   ByVal size As Long _
) 
'Usage
 
Dim instance As RasterImage
Dim data As IntPtr
Dim size As Long
 
instance.SetUserData(data, size)
public void SetUserData( 
   IntPtr data,
   long size
)
 function Leadtools.RasterImage.SetUserData( 
   data ,
   size 
)
public:
void SetUserData( 
   IntPtr data,
   int64 size
) 

Parameters

data
Pointer to the unmanaged memory buffer containing the image new data.
size
Number of bytes in data.
Remarks

The data that you specify will not be copied, but instead will be referenced by the image until the image is disposed, or until you call this method again.

To set up a RasterImage object with unmanaged user data, call the RasterImage Constructor(RasterMemoryFlags,Int32,Int32,Int32,RasterByteOrder,RasterViewPerspective,RasterColor[],IntPtr,Int64) constructor passing RasterMemoryFlags.User to the flags parameter.

Some image processing commands, such as Leadtools.ImageProcessing.RotateCommand and Leadtools.ImageProcessing.ColorResolutionCommand, need to re-allocate the image data. If you create an image with RasterMemoryFlags.User, and pass it to these command, they will change the image to RasterMemoryFlags.Conventional and re-allocate memory. Your original memory will no longer be used.

You are responsible for managing the image data. Dispose will not free data.

Example
 
Public Sub SetUserDataExample()
      Dim codecs As RasterCodecs = New RasterCodecs()

      Dim destFileName As String = Path.Combine(LEAD_VARS.ImagesDir, "UserData.bmp")

      ' Create an image with user defined data
      Dim width As Integer = 40
      Dim height As Integer = 40
      Dim bitsPerPixel As Integer = 24
      Dim size As Integer = width * height * 3
      Dim data1 As IntPtr = Marshal.AllocHGlobal(size)

      ' Load the image
      Dim image As RasterImage = New RasterImage(RasterMemoryFlags.User, width, height, bitsPerPixel, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, Nothing, IntPtr.Zero, 0)

      ' Get a pointer to the internal data and fill it with gray shades
      Dim dataSize As Integer = CInt(image.DataSize)

      Dim buffer As Byte() = New Byte(dataSize - 1) {}
      Dim inc As Boolean = True
      Dim value As Byte = 0
      Dim i As Integer = 0
      Do While i < buffer.Length
         buffer(i + 0) = value
         buffer(i + 1) = value
         buffer(i + 2) = value

         If inc Then
            If value = 255 Then
               inc = False
               value = 254
            Else
               value = value + Convert.ToByte(1)
            End If
         Else
            If value = 0 Then
               inc = True
               value = 1
            Else
               value = value - Convert.ToByte(1)
            End If
         End If
         i += 3
      Loop

      ' Copy this buffer to the image data
      Marshal.Copy(buffer, 0, data1, buffer.Length)

      ' Set the user data
      image.SetUserData(data1, dataSize)

      ' Save the image
      codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24)

      image.Dispose()
      Marshal.FreeHGlobal(data1)
      codecs.Dispose()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
public void SetUserDataExample()
   {
      RasterCodecs codecs = new RasterCodecs();

      string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "UserData.bmp");

      // Create an image with user defined data
      int width = 40;
      int height = 40;
      int bitsPerPixel = 24;
      int size = width * height * 3;
      IntPtr data1 = Marshal.AllocHGlobal(size);

      // Load the image
      RasterImage image = new RasterImage(
         RasterMemoryFlags.User,
         width,
         height,
         bitsPerPixel,
         RasterByteOrder.Bgr,
         RasterViewPerspective.TopLeft,
         null,
         IntPtr.Zero,
         0);

      // Get a pointer to the internal data and fill it with gray shades
      long dataSize = image.DataSize;

      byte[] buffer = new byte[dataSize];
      bool inc = true;
      byte value = 0;
      for(int i = 0; i < buffer.Length; i += 3)
      {
         buffer[i + 0] = value;
         buffer[i + 1] = value;
         buffer[i + 2] = value;

         if(inc)
         {
            if(value == 255)
            {
               inc = false;
               value = 254;
            }
            else
               value++;
         }
         else
         {
            if(value == 0)
            {
               inc = true;
               value = 1;
            }
            else
               value--;
         }
      }

      // Copy this buffer to the image data
      Marshal.Copy(buffer, 0, data1, buffer.Length);

      // Set the user data
      image.SetUserData(data1, dataSize);

      // Save the image
      codecs.Save(image, destFileName, RasterImageFormat.Bmp, 24);

      image.Dispose();
      Marshal.FreeHGlobal(data1);
      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
public void SetUserDataExample(Stream destStream)
{
   // Create an image with user defined data
   int width = 40;
   int height = 40;
   int bitsPerPixel = 24;
   // Create a user image
   RasterImage image = new RasterImage(
      RasterMemoryFlags.User,
      width,
      height,
      bitsPerPixel,
      RasterByteOrder.Bgr,
      RasterViewPerspective.TopLeft,
      null,
      null,
      0);

   // Create a data buffer for the image data
   // and fill the pixel values (gradient)
   int size = width * height * 3;
   byte[] buffer = new byte[size];

   bool inc = true;
   byte value = 0;
   for (int i = 0; i < buffer.Length; i += 3)
   {
      buffer[i + 0] = value;
      buffer[i + 1] = value;
      buffer[i + 2] = value;

      if (inc)
      {
         if (value == 255)
         {
            inc = false;
            value = 254;
         }
         else
            value++;
      }
      else
      {
         if (value == 0)
         {
            inc = true;
            value = 1;
         }
         else
            value--;
      }
   }

   // Set the user data of the image
   image.CopyData(buffer, buffer.Length);

   // Save the image
   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 24);

   image.Dispose();
}
Public Sub SetUserDataExample(ByVal destStream As Stream)
   ' Create an image with user defined data
   Dim width As Integer = 40
   Dim height As Integer = 40
   Dim bitsPerPixel As Integer = 24
   ' Create a user image
   Dim image As RasterImage = New RasterImage(RasterMemoryFlags.User, width, height, bitsPerPixel, RasterByteOrder.Bgr, RasterViewPerspective.TopLeft, Nothing, Nothing, 0)

   ' Create a data buffer for the image data
   ' and fill the pixel values (gradient)
   Dim size As Integer = width * height * 3
   Dim buffer As Byte() = New Byte(size - 1){}

   Dim inc As Boolean = True
   Dim value As Byte = 0
   Dim i As Integer = 0
   Do While i < buffer.Length
      buffer(i + 0) = value
      buffer(i + 1) = value
      buffer(i + 2) = value

      If inc Then
         If value = 255 Then
            inc = False
            value = 254
         Else
            value += 1
         End If
      Else
         If value = 0 Then
            inc = True
            value = 1
         Else
            value -= 1
         End If
      End If
      i += 3
   Loop

   ' Set the user data of the image
   image.CopyData(buffer, buffer.Length)

   ' Save the image
   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 24)

   image.Dispose()
End Sub
Requirements

Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

See Also

Reference

RasterImage Class
RasterImage Members

 

 


Products | Support | Contact Us | Copyright Notices

© 2006-2012 All Rights Reserved. LEAD Technologies, Inc.