←Select platform

HighQualityRotateCommand Class

Summary
Performs high quality rotation on a black and white image.
Syntax
C#
Objective-C
C++/CLI
Java
Python
public class HighQualityRotateCommand : RasterCommand 
@interface LTHighQualityRotateCommand : LTRasterCommand 
public class HighQualityRotateCommand 
    extends RasterCommand 
public ref class HighQualityRotateCommand : public RasterCommand   
class HighQualityRotateCommand(RasterCommand): 
Remarks

The HighQualityRotateCommand can be used to perform high quality rotation on a black and white (1 bits/pixel) images in any angle.

Normal rotation commands such as RotateCommand will rotate the image data as is, which may result in less than desired quality due to the limited number of bits/pixel of the image (1 bit). This command will temporarily convert the image to 8 bits/pixel internally, perform the rotation and then convert the image back to 1 bits/pixel.

This command only works with a 1 bits/pixel images (a RasterImage with RasterImage.BitsPerPixel equals to 1). Using this command on any other image type will result in an exception.

This command does not support signed data images.

For more information, refer to Cleaning Up 1-Bit Images.

Example

This example will show the difference between normal rotation (RotateCommand) and high quality rotation (HighQualityRotateCommand) when performed on a 1 bits/pixel image.

C#
Java
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing; 
using Leadtools.ImageProcessing.Core; 
 
public void HighQualityRotateCommandExample() 
{ 
   RasterCodecs codecs = new RasterCodecs(); 
 
   // Get an image 
   string tifFileName = Path.Combine(LEAD_VARS.ImagesDir, "ocr1.tif"); 
   string normalRotateFileName = Path.Combine(LEAD_VARS.ImagesDir, "ocr1_NormalRotated.tif"); 
   string highQualityRotateFileName = Path.Combine(LEAD_VARS.ImagesDir, "ocr1_HighQualityRotated.tif"); 
 
   int angle = 30 * 100; 
   RasterColor fillColor = RasterColor.FromKnownColor(RasterKnownColor.White); 
 
   // Load the image, rotate normally by 30 degrees and save 
   using (RasterImage image = codecs.Load(tifFileName)) 
   { 
      RotateCommand cmd = new RotateCommand(); 
      cmd.Angle = angle; 
      cmd.Flags = RotateCommandFlags.Resize | RotateCommandFlags.Bicubic; 
      cmd.FillColor = fillColor; 
      cmd.Run(image); 
      codecs.Save(image, normalRotateFileName, image.OriginalFormat, image.BitsPerPixel); 
   } 
 
 
   // Load the image, rotate with high quality by 30 degrees and save 
   using (RasterImage image = codecs.Load(tifFileName)) 
   { 
      HighQualityRotateCommand cmd = new HighQualityRotateCommand(); 
      cmd.Angle = angle; 
      cmd.Flags = HighQualityRotateCommandFlags.Resize | HighQualityRotateCommandFlags.BestQuality; 
      cmd.FillColor = fillColor; 
      cmd.Run(image); 
      codecs.Save(image, highQualityRotateFileName, image.OriginalFormat, image.BitsPerPixel); 
   } 
 
   // Now compare the saved TIF files and notice the difference in quality between 
   // the normal rotate and high quality 
 
   codecs.Dispose(); 
} 
 
static class LEAD_VARS 
{ 
   public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images"; 
} 
 
import java.io.File; 
import java.io.IOException; 
 
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.imageprocessing.*; 
import leadtools.imageprocessing.core.*; 
 
 
public void highQualityRotateCommandExample() { 
 
   final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images"; 
   RasterCodecs codecs = new RasterCodecs(); 
 
   // Get an image 
   String tifFileName = combine(LEAD_VARS_IMAGES_DIR, "ocr1.tif"); 
   String normalRotateFileName = combine(LEAD_VARS_IMAGES_DIR, "ocr1_NormalRotated.tif"); 
   String highQualityRotateFileName = combine(LEAD_VARS_IMAGES_DIR, "ocr1_HighQualityRotated.tif"); 
 
   int angle = 30 * 100; 
   RasterColor fillColor = RasterColor.fromKnownColor(RasterKnownColor.WHITE); 
 
   // Load the image, rotate normally by 30 degrees and save 
   RasterImage image = codecs.load(tifFileName); 
   RotateCommand cmd = new RotateCommand(); 
   cmd.setAngle(angle); 
   cmd.setFlags(RotateCommandFlags.RESIZE.getValue() | RotateCommandFlags.BICUBIC.getValue()); 
   cmd.setFillColor(fillColor); 
   cmd.run(image); 
   codecs.save(image, normalRotateFileName, image.getOriginalFormat(), image.getBitsPerPixel()); 
   image.dispose(); 
 
   assertTrue(new File(normalRotateFileName).exists()); 
   System.out.println("Command run and image exported to: " + normalRotateFileName); 
 
   // Load the image, rotate with high quality by 30 degrees and save 
   image = codecs.load(tifFileName); 
   HighQualityRotateCommand command = new HighQualityRotateCommand(); 
   command.setAngle(angle); 
   command.setFlags( 
         HighQualityRotateCommandFlags.RESIZE.getValue() | HighQualityRotateCommandFlags.BEST_QUALITY.getValue()); 
   command.setFillColor(fillColor); 
   assertTrue(cmd.getAngle() == 3000 && cmd.getFillColor() == fillColor); 
   command.run(image); 
   codecs.save(image, highQualityRotateFileName, image.getOriginalFormat(), image.getBitsPerPixel()); 
 
   assertTrue(new File(highQualityRotateFileName).exists()); 
   System.out.println("Command run and image exported to: " + highQualityRotateFileName); 
 
   image.dispose(); 
 
   // Now compare the saved TIF files and notice the difference in quality between 
   // the normal rotate and high quality 
 
   codecs.dispose(); 
 
} 
Requirements

Target Platforms

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

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