Browse our Products

Aspose.Imaging for .NET 23.7 - Release notes

Competitive features:

  • Add alpha blending feature for RasterImage

Net2.0, Net3.5,Net3.5 client profile remove notice - Please note, since 23.7 Aspose.Imaging does not support Net2.0, Net3.5, Net3.5 client profile configurations.

KeySummaryCategory
IMAGINGNET-6017Add alpha blending feature for RasterImageFeature
IMAGINGNET-6459UnIfy naming conventionsEnhancement
IMAGINGNET-6421EMF export errorEnhancement
IMAGINGNET-6369CCITT G3 1D decoder don’t work properlyEnhancement
IMAGINGNET-6033Synchronize use of Pages and format specific collections for multi page imagesEnhancement

Public API changes:

Added APIs:

Field/Enum Aspose.Imaging.FileFormat.Unknown

Method Aspose.Imaging.RasterCachedImage.Blend (Aspose.Imaging.Point,Aspose.Imaging.RasterImage,Aspose.Imaging.Rectangle,System.Byte)

Method Aspose.Imaging.RasterImage.Blend (Aspose.Imaging.Point,Aspose.Imaging.RasterImage,Aspose.Imaging.Rectangle,System.Byte)

Method Aspose.Imaging.RasterImage.Blend (Aspose.Imaging.Point,Aspose.Imaging.RasterImage,System.Byte)

Removed APIs:

Field/Enum Aspose.Imaging.FileFormat.Undefined

Usage Examples:

IMAGINGNET-6459 UnIfy naming conventions

var format = Aspose.Imaging.FileFormat.Unknown;
Console.WriteLine(format);

IMAGINGNET-6421 EMF export error

using var image = Image.Load("33.emf");
image.Save("emf-to-png.png");

IMAGINGNET-6033 Synchronize use of Pages and format specific collections for multi page images

cpp
 var fileFormats = new FileFormat[3] { FileFormat.Tiff, FileFormat.Gif, FileFormat.Dicom };
 foreach (var fileFormat in fileFormats)
 {
     var fileName = GetTestFilePath(fileFormat);
     using (var image = Image.Load(fileName))
     {
         var expectPageCount = (image as IMultipageImage).PageCount + 1;
         switch (fileFormat)
         {
             case FileFormat.Tiff:
                 var tiffImage = (TiffImage)image;
                 this.CheckPages(tiffImage.Frames, tiffImage.Pages);
                 tiffImage.RemoveFrame(1);
                 tiffImage.AddFrame(tiffImage.Frames[0]);
                 tiffImage.InsertFrame(0, tiffImage.Frames[0]);
                 this.CheckPages(tiffImage.Frames, tiffImage.Pages);
                 break;
             case FileFormat.Gif:
                 var gifImage = (GifImage)image;
                 var images = ReadImageBlocksFromGif(gifImage);
                 this.CheckPages(images, gifImage.Pages);
                 IGifBlock block = null;
                 for (int j = 0; j < gifImage.Blocks.Length; j++)
                 {
                     if (gifImage.Blocks[j] is Image)
                     {
                         block = gifImage.Blocks[j];
                         break;
                     }
                 }

                 gifImage.RemoveBlock(block);
                 gifImage.AddBlock(new GifGraphicsControlBlock());
                 gifImage.AddBlock(block);

                 gifImage.InsertBlock(0, block);
                 gifImage.InsertBlock(0, new GifGraphicsControlBlock());
                 images = ReadImageBlocksFromGif(gifImage);
                 this.CheckPages(images, gifImage.Pages);
                 break;
             case FileFormat.Dicom:
                 var dicomImage = (DicomImage)image;
                 this.CheckPages(dicomImage.DicomPages, dicomImage.Pages);
                 dicomImage.RemovePage(0);
                 dicomImage.InsertPage(0);
                 dicomImage.AddPage(dicomImage.DicomPages[0]);
                 this.CheckPages(dicomImage.DicomPages, dicomImage.Pages);
                 break;
         }

         Assert.AreEqual(expectPageCount, (image as IMultipageImage).PageCount);
     }
 }



 cpp
private Image[] ReadImageBlocksFromGif(GifImage gifImage)
{
    var images = new List<Image>();
    foreach (var gifBlock in gifImage.Blocks)
    {
        if (gifBlock is Image)
        {
            images.Add(gifBlock as Image);
        }
    }

    return images.ToArray();
}


 cpp
 private void CheckPages(Image[] images1, Image[] images2)
 {
     if (images1.Length != images2.Length)
     {
         throw new TestException($"Array lengths do not match images1={images1.Length}, iamges2={images2.Length}");
     }

     for (int i = 0; i < images1.Length; i++)
     {
         if (images1[i] != images2[i])
         {
             throw new TestException($"images1 is not equal images2, number:{i}");
         }
     }
 }

IMAGINGNET-6017 Add alpha blending feature for RasterImage

using var background = Image.Load(@"background.webp") as RasterImage;
using var overlay = Image.Load(@"logo.png") as RasterImage;

var center = new Point((background.Width - overlay.Width) / 2, (background.Height - overlay.Height) / 2);
background.Blend(center, overlay, overlay.Bounds, 127);

background.Save(@blended.webp");