←Select platform

WriteTransformMarker(int,byte[],int,int) Method

Summary
Controls how the transform markers are used when performing a lossless transformation for certain formats.
Syntax
C#
C++/CLI
Java
Python
public void WriteTransformMarker( 
   int id, 
   byte[] data, 
   int dataOffset, 
   int dataLength 
) 
public void writeTransformMarker(int id, byte data[], int dataOffset, int dataLength) 
public: 
void WriteTransformMarker(  
   int id, 
   array<byte>^ data, 
   int dataOffset, 
   int dataLength 
)  
def WriteTransformMarker(self,id,data,dataOffset,dataLength): 

Parameters

id
The id of the metadata marker.

data
A byte array containing the data for the metadata marker.

dataOffset
Offset into  data into which to begin the read operation.

dataLength
Number of bytes to read from  data.

Remarks

You should use this method to write a certain marker data into the file.

This method can be called only from within the CodecsTransformMarkerCallback passed to the Transform method.

The transform mechanism is as follows:

  • You call Transform.
  • Transform will call the CodecsTransformMarkerCallback callback passed to it for every marker contained in the source file. In the callback, you can replace markers, insert markers or allow LEADTOOLS to do the default processing (recommended).
  • You can override the default action for a marker by returning one of the following values from the transform callback:
    • CodecsTransformMarkerAction.Default: Let LEADTOOLS perform the default action on the marker. This means the marker might (or might not) be transformed and will be written to the destination file.
    • CodecsTransformMarkerAction.Ignore: This marker will be ignored (this is useful for stripping unwanted markers). You should also use this if you want to do your own transformation and write the marker yourself by calling WriteTransformMarker.
    • CodecsTransformMarkerAction.Abort: Abort the process. This will cause Transform to throw a 'user-abort' exception.

Note: You can also use WriteTransformMarker to insert your own markers. The marker will be inserted before the current marker. You can call WriteTransformMarker as many times as you wish. Every call to WriteTransformMarker will insert a new marker.

Warning: Incorrect handling of the markers will generate corrupt files! Since some markers contain important information about the image (image width, height, compression method, colorspace, etc), you should use caution when working with markers.

Example
C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Svg; 
 
 
public void TransformExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); 
 
   string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_Transform.cmp"); 
 
 
   // Load the source image with markers 
   Debug.WriteLine("Loading the source image with all markers"); 
   codecs.Options.Load.Markers = true; 
   RasterImage srcImage = codecs.Load(srcFileName); 
 
   // Show the markers loaded, if any 
   Debug.WriteLine("These markers were loaded:"); 
   foreach (RasterMarkerMetadata marker in srcImage.Markers) 
   { 
      byte[] data = marker.GetData(); 
      codecs.WriteMarker(srcFileName, 1, marker); 
      // codecs.WriteMarker(stream, 1, marker); 
      codecs.WriteTransformMarker(marker.Id, data, 0, 1); 
      Debug.WriteLine(" {0}, DataSize:{1}", marker.Id, data.Length); 
   } 
 
   codecs.Transform( 
      srcFileName, 
      destFileName, 
      CodecsTransformFlags.Rotate90, 
      1, 
      CodecsTransformMarkerCallback); 
 
   // Clean up 
   codecs.Dispose(); 
} 
 
CodecsTransformMarkerAction CodecsTransformMarkerCallback(int id, RasterNativeBuffer buffer, CodecsTransformFlags transform) 
{ 
   Debug.WriteLine("Transforming: id: {0}, Data Length: {1}, transform: {2}", id, buffer.Length, transform); 
   return CodecsTransformMarkerAction.Default; 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import java.io.*; 
import java.net.*; 
import java.nio.file.Paths; 
import java.util.*; 
import java.time.Instant; 
import java.time.Duration; 
 
import org.junit.*; 
import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 
import static org.junit.Assert.*; 
 
import leadtools.*; 
import leadtools.codecs.*; 
import leadtools.codecs.RasterCodecs.FeedCallbackThunk; 
import leadtools.drawing.internal.*; 
import leadtools.imageprocessing.*; 
import leadtools.imageprocessing.color.ChangeIntensityCommand; 
import leadtools.svg.*; 
 
 
RasterCodecs codecs; 
 
public void transformExample() { 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   codecs = new RasterCodecs(); 
 
   String srcFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1.cmp"); 
   String destFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1_Transform.cmp"); 
 
   // Load the source image with markers 
   System.out.println("Loading the source image with all markers"); 
   codecs.getOptions().getLoad().setMarkers(true); 
   RasterImage srcImage = codecs.load(srcFileName); 
 
   // Show the markers loaded, if any 
   System.out.println("These markers were loaded:"); 
 
   for (RasterMarkerMetadata marker : srcImage.getMarkers()) { 
      byte[] data = marker.getData(); 
      ILeadStream srcFileStream = LeadStreamFactory.create(srcFileName); 
      codecs.writeMarker(srcFileStream, 1, marker); 
      codecs.transform(srcFileName, destFileName, CodecsTransformFlags.ROTATE_90, 1, CodecsTransformMarkerCallback); 
      System.out.printf(" %s, DataSize:%s%m", marker.getId(), data.length); 
   } 
 
   // Clean up 
   codecs.dispose(); 
} 
 
CodecsTransformMarkerListener CodecsTransformMarkerCallback = new CodecsTransformMarkerListener() { 
 
   @Override 
   public CodecsTransformMarkerAction OnCodecsTransformMarkerCallback(int id, RasterNativeBuffer buffer, 
         CodecsTransformFlags transform) { 
      buffer.getData(); 
      codecs.writeTransformMarker(id, buffer.getData(), 1, 1); 
      System.out.printf("Transforming: id: %s, Data Length: %s, transform: %s%n", id, buffer.getLength(), transform); 
      return CodecsTransformMarkerAction.DEFAULT; 
   } 
 
}; 
Requirements

Target Platforms

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

Leadtools.Codecs Assembly
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.