←Select platform

SaveStamp(RasterImage,Stream,int,int,int,CodecsSavePageMode) Method

Summary
Saves a stamp in an existing stream with specific options.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public void SaveStamp( 
   RasterImage image, 
   Stream stream, 
   int firstPage, 
   int lastPage, 
   int firstSavePageNumber, 
   CodecsSavePageMode pageMode 
) 
- (BOOL)  saveStamp:(LTRasterImage *)image  
             stream:(LTLeadStream *)stream  
          firstPage:(NSInteger)firstPage  
           lastPage:(NSInteger)lastPage  
firstSavePageNumber:(NSInteger)firstSavePageNumber  
           pageMode:(LTCodecsSavePageMode)pageMode  
              error:(NSError **)error 
public void saveStamp(RasterImage image, ILeadStream stream, int firstPage, int lastPage, int firstSavePageNumber, CodecsSavePageMode pageMode) 
public: 
void SaveStamp(  
   RasterImage^ image, 
   Stream^ stream, 
   int firstPage, 
   int lastPage, 
   int firstSavePageNumber, 
   CodecsSavePageMode pageMode 
)  

Parameters

image
The RasterImage object that contain the thumbnail (stamp) image.

stream
A Stream containing the data of an existing image file.

firstPage
1-based index of the first page in  image to save.

lastPage
1-based index of the last page in  image to save. Pass -1 to save from  firstPage to the last page in  image.

firstSavePageNumber
1-based index of the first output page. If the output file already exists, then this parameter lets you control which pages to overwrite and/or where to append the new pages.

pageMode
Determines how to handle the page when saving to multipage formats. This can be one of the following:

Value Description
CodecsSavePageMode.Append Append the new page(s) to the end of the file. If the file does not exist, this option will create the file and add the pages to it. [firstSavePageNumber]{} is not used.
CodecsSavePageMode.Insert Insert the new page(s) at the index specified by [firstSavePageNumber].
CodecsSavePageMode.Replace Replace the page(s) starting at the index specified by [firstSavePageNumber].
CodecsSavePageMode.Overwrite Overwrite the page(s) starting at the index specified by [firstSavePageNumber].
Remarks

The stamp will be written to last page in the file. If that page already has a stamp, it will be overwritten; If the file to which the stamp is being written does not exist, an exception will occur.

This function works for JPEG, Exif, PNG and TIF file formats. For regular JPEG files, the stamp saved is always uncompressed and can be 8 or 24 bits per pixel. The stamp can be any width and height, but the stamp data and stamp header must completely fit in an APP0 marker. Therefore, the size must be less than 64k bytes (0xFFFF).

For Exif JPEG files, the stamps can be uncompressed or JPEG compressed and must be 24 bits per pixel. Exif JPEG stamps are supposed to be 160 x 120. However, LEADTOOLS can save and read Exif JPEG stamps of other dimensions. The stamp, along with other information such as the TIFF_HEADER, 0th IFD, 1st IFD, etc. must completely fit in an APP1 marker. Therefore, the size must be less than 64k bytes (0xFFFF).

For PNG files, the stamp will be saved uncompressed. The width and height are not limited but the bitmap should 24-bit.

Note

At this time, there are no multipage formats that support stamps.

Example
C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Color; 
using Leadtools.Svg; 
 
 
 
public void StampExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1.cmp"); 
   string destFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_WithCustomStamp.cmp"); 
   string stampFileName = Path.Combine(LEAD_VARS.ImagesDir, "Image1_Stamp.bmp"); 
 
   // Load the source file name 
   RasterImage image = codecs.Load(srcFileName); 
 
   // Save as the destination image 
   codecs.Save(image, destFileName, RasterImageFormat.Cmp, 24); 
 
   // Resize the image to fit into 128 by 128 pixels keeping the aspect ratio 
   LeadRect rc = new LeadRect(0, 0, 128, 128); 
   rc = RasterImage.CalculatePaintModeRectangle( 
      image.ImageWidth, 
      image.ImageHeight, 
      rc, 
      RasterPaintSizeMode.FitAlways, 
      RasterPaintAlignMode.Near, 
      RasterPaintAlignMode.Near); 
 
   SizeCommand command = new SizeCommand(); 
   command.Width = rc.Width; 
   command.Height = rc.Height; 
   command.Flags = RasterSizeFlags.None; 
   command.Run(image); 
 
   // Add the word "Stamp" on the image at the middle 
   string message = "Stamp"; 
 
   using (Leadtools.Drawing.RasterGraphics rg = Leadtools.Drawing.RasterImagePainter.CreateGraphics(image)) 
   { 
      using (System.Drawing.StringFormat sf = new System.Drawing.StringFormat()) 
      { 
         sf.Alignment = System.Drawing.StringAlignment.Center; 
         sf.LineAlignment = System.Drawing.StringAlignment.Center; 
         using (System.Drawing.Font f = new System.Drawing.Font("Arial", 20, System.Drawing.FontStyle.Bold)) 
         { 
            System.Drawing.Rectangle rcDraw = new System.Drawing.Rectangle(rc.X, rc.Y, rc.Width, rc.Height); 
            rg.Graphics.DrawString(message, f, System.Drawing.Brushes.Yellow, rcDraw, sf); 
         } 
      } 
   } 
 
   // Now set this image as the stamp for this file 
   codecs.SaveStamp(image, destFileName, 1, 1, 1, CodecsSavePageMode.Overwrite); 
   image.Dispose(); 
 
   // Load the stamp from the file and save it into another file 
   image = codecs.ReadStamp(destFileName, 1); 
   codecs.Save(image, stampFileName, RasterImageFormat.Bmp, 24); 
   image.Dispose(); 
 
   // Clean up 
   codecs.Dispose(); 
} 
 
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.*; 
 
 
public void stampExample() { 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   RasterCodecs codecs = new RasterCodecs(); 
 
   String srcFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1.cmp"); 
   String destFileName = combine(LEAD_VARS_IMAGES_DIR, "Image2.cmp"); 
   String stampFileName = combine(LEAD_VARS_IMAGES_DIR, "Image1_LoadFileTile2.bmp"); 
 
   // Load the source file name 
   RasterImage image = codecs.load(srcFileName); 
 
   // Save as the destination image 
   codecs.save(image, destFileName, RasterImageFormat.CMP, 24); 
 
   // Resize the image to fit into 128 by 128 pixels keeping the aspect ratio 
   LeadRect rc = new LeadRect(0, 0, 128, 128); 
   rc = RasterImage.calculatePaintModeRectangle(image.getImageWidth(), image.getImageHeight(), rc, 
         RasterPaintSizeMode.FIT_ALWAYS, RasterPaintAlignMode.NEAR, RasterPaintAlignMode.NEAR); 
 
   SizeCommand command = new SizeCommand(); 
   command.setWidth(rc.getWidth()); 
   command.setHeight(rc.getHeight()); 
   command.setFlags(RasterSizeFlags.NONE.getValue()); 
   command.run(image); 
 
   // Add the word "Stamp" on the image at the middle 
   String message = "Stamp"; 
 
   ILeadStream ls = LeadStreamFactory.create(destFileName); 
 
   DrwEngine drwEngine = new DrwEngine(DrwEngineType.OPEN_GL, image); 
   DrwStringFormat sf = drwEngine.newStringFormat( 
         DrwAlignment.CENTER, 
         DrwAlignment.CENTER, 
         DrwStringFormatFlags.NONE.getValue()); 
   DrwFont f = drwEngine.newFont("Arial", 20, DrwFontStyle.BOLD.getValue()); 
 
   drwEngine.drawString(message, f, (DrwBrush) drwEngine.newSolidBrush(RasterColor.BLACK), rc.toLeadRectD(), sf); 
 
   // Now set this image as the stamp for this file 
   codecs.saveStamp(image, ls, 1, 1, 1, CodecsSavePageMode.OVERWRITE); 
   image.dispose(); 
 
   // Load the stamp from the file and save it into another file 
   image = codecs.readStamp(ls, 1); 
 
   codecs.save(image, stampFileName, RasterImageFormat.BMP, 24); 
   assertTrue("File unsuccessfully saved to" + stampFileName, (new File(stampFileName)).exists()); 
 
   image.dispose(); 
 
   // Clean up 
   codecs.dispose(); 
} 
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.