Sets the data for the image to the specified unmanaged memory buffer.
- (BOOL)setUserData:(nullable unsigned char *)userData
userDataSize:(unsigned long)userDataSize
error:(NSError **)error
public void setUserData(
byte data[],
long size
)
function Leadtools.RasterImage.SetUserData(
data ,
size
)
data
Pointer to the unmanaged memory buffer containing the image new data.
size
Number of bytes in data.
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.
This example uses GetPixelData and SetPixelData methods to swap the R and G values for a particular pixel.
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
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();
}
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
Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET