←Select platform

SetUserData Method

Summary

Sets the data for the image to the specified unmanaged memory buffer.

Syntax
C#
VB
Objective-C
C++
Java
public void SetUserData( 
   IntPtr data, 
   long size 
) 
Public Sub SetUserData( _ 
   ByVal data As IntPtr, _ 
   ByVal size As Long _ 
)  
- (BOOL)setUserData:(nullable unsigned char *)userData 
       userDataSize:(unsigned long)userDataSize 
              error:(NSError **)error 
public void setUserData( 
  byte data[],  
  long 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 /#ctor constructor passing RasterMemoryFlags.User to the flags parameter.

Some image processing commands, such as RotateCommand and 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

This example uses GetPixelData and SetPixelData methods to swap the R and G values for a particular pixel.

C#
VB
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Dicom; 
using Leadtools.Drawing; 
using Leadtools.Controls; 
using LeadtoolsExamples.Common; 
using Leadtools.Svg; 
 
public void SetUserDataExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string destFileName = Path.Combine(ImagesPath.Path, "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(); 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing 
Imports Leadtools.ImageProcessing.Core 
Imports Leadtools.ImageProcessing.Color 
Imports Leadtools.Controls 
Imports Leadtools.Dicom 
Imports Leadtools.Drawing 
Imports Leadtools.Svg 
 
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 
c#[Silverlight C# Example] 
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.Dicom; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Examples; 
using Leadtools.Windows.Media; 
 
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(); 
} 
vb[Silverlight VB Example] 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.Dicom 
Imports Leadtools.ImageProcessing 
Imports Leadtools.ImageProcessing.Core 
Imports Leadtools.ImageProcessing.Color 
Imports Leadtools.Windows.Media 
 
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

Help Version 20.0.2020.4.2
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2020 LEAD Technologies, Inc. All Rights Reserved.

Leadtools Assembly