netFreeImage

(Hide table-of-contents)

Overview

netFreeImage is a Dyalog cover class for bitmap resizing, cropping, compression and format change using .Net. It is using an open source project called FreeImage created by Floris van den Berg originally written in C++. The project is maintained today by Hervé Drolon. The .Net wrapper is the work of Jean-Philippe Goerke and Carsten Klein.Original project location FreeImage.NET wrapper project page A Beginners Guide to Bitmaps

netFreeImage supports:

netFreeImage does not support:

For this class to work you need to download the original dll in C++ (FreeImage.dll) and the .Net wrapper (FreeImageNET.dll) and copy them both in the same directory as the dyalog.exe program. For commodity the version 3.17.04 of the dlls can be downloaded here: FreeImage.NET_3.17.0.4.zip

Instantiating and Disposing of the class:

   bmp ← ⎕NEW netFreeImage    ⍝ Instantiate the class.

   bmp.Dispose                ⍝ To do when finish using the class to release the memory of the last image.
                              ⍝ Between .LoadFromFile it is not necessary to use .Dispose to release the memory of
                              ⍝ the previous image because the class will do it automatically.

Methods to Load and Save a Bitmap

 LoadFromFile                    ⍝ Get a FreeImageBitmap object from a file on disk.
 LoadFromBase64                  ⍝ Get a FreeImageBitmap object from a Base64 string.
 LoadFromMemoryStream            ⍝ Get a FreeImageBitmap object from a MemoryStream.
 LoadFromBitmap                  ⍝ Get a FreeImageBitmap object from a System.Drawing.Bitmap (WindowsForms).
 PasteFromClipboard              ⍝ Paste Image from Clipboard.

 SaveToFile                      ⍝ Save the loaded bitmap to a file on disk with default values (format conversion allowed).
 SaveToBase64                    ⍝ Save the loaded bitmap to a Base64 character vector with the current bitmap format.
 SaveToMemoryStream              ⍝ Save the loaded bitmap to a MemoryStream object with the specified bitmap format.
 SaveToBitmap                    ⍝ Save the loaded bitmap to a System.Drawing.Bitmap (WindowsForms).
 SaveToHtml                      ⍝ Save the loaded bitmap to an HTML inline image with the current bitmap format.
 CopyToClipboard                 ⍝ Copy Image to Clipboard.

Methods for Bitmap operation

 AdjustBrightness                ⍝ Adjusts the brightness of a 8-, 24- or 32-bit image by a certain amount.
 AdjustColors                    ⍝ Adjusts an image's brightness, contrast, gamma and invert image in a single operation.
 AdjustContrast                  ⍝ Adjusts the contrast of a 8-, 24- or 32-bit image by a certain amount.
 AdjustGamma                     ⍝ Performs gamma correction on a 8-, 24- or 32-bit image.
 ConvertFormat                   ⍝ Convert the format of the loaded bitmap to another bitmap format.
 ConvertTo4Bits                  ⍝ Converts the loaded bitmap to 4 bits per pixel using the Xiaolin Wu color quantization algorithm
 ConvertTo8Bits                  ⍝ Converts the loaded bitmap to 8 bits per pixel using the Xiaolin Wu color quantization algorithm
 ConvertTo16Bits                 ⍝ Converts the loaded bitmap to 16 bits per pixel (RGB565).
 ConvertTo24Bits                 ⍝ Converts the loaded bitmap to 24 bits per pixel.
 ConvertTo32Bits                 ⍝ Converts the loaded bitmap to 32 bits per pixel.
 ConvertToGreyscale              ⍝ Converts the loaded bitmap to 256, 16 or 1 tone of grey.
 ConvertToThumbnail              ⍝ Converts the loaded bitmap to a thumbnail while keeping aspect ratio.
 Crop                            ⍝ Crop the loaded bitmap.
 FlipHorizontal                  ⍝ Flip horizontally the loaded bitmap.
 FlipVertical                    ⍝ Flip vertically the loaded bitmap.
 Invert                          ⍝ Invert the loaded bitmap.
 Resize                          ⍝ Resize the loaded bitmap.
 Rotate                          ⍝ Rotate the loaded bitmap.
 JPEGCrop                        ⍝ Performs a lossless crop on a JPEG file.
 JPEGTransform                   ⍝ Performs a lossless rotation or flipping on a JPEG file.

Methods for Pixel Access

 GetPalette                      ⍝ Get the colors of the palette of loaded bitmap if existing.
 GetPixelsColors                 ⍝ Get the RGB colors for all pixels of loaded bitmap.
 GetSinglePixelColor             ⍝ Get the RGB value of a single pixel of loaded bitmap.

Methods for Bitmap Information

 GetMetaData                     ⍝ Get a Key/Value pair for each MetaData of the loaded bitmap.
 Info                            ⍝ Show information about the loaded bitmap.
 SetComment                      ⍝ Sets the comment of the loaded bitmap. Supported formats are JPEG, PNG and GIF.
 Show                            ⍝ Show the loaded bitmap in a WPF window.
 ShowInWebBrowser                ⍝ Show the loaded bitmap in WindowForm browser using 'SaveToHtml'.
 Height                          ⍝ Height of the loaded bitmap in pixel.
 Width                           ⍝ Width of the loaded bitmap in pixel.

Known limitations

Not all methods of the .Net wrapper are coded in the netFreeImage Dyalog class. For example access to multipage bitmap is not implemented. While using the .Net wrapper the FreeImageBitmap namespace is easier to use than the FreeImage namespace that has a similar set of methods that are static only.

How to install netFreeImage in your workspace

  1. Download netFreeImage.v1.1.txt

  2. Do a Select all (Ctrl+A) and a copy (Ctrl+C).
  3. In your workspace execute )ed ○ netFreeImage

  4. Paste (Ctrl+V) the text into the Dyalog editor
  5. Press Escape and ')save' your workspace
  6. Download FreeImage.NET_3.17.0.4.zip

  7. Unzip and install FreeImage.dll and FreeImageNET.dll in the dyalog.exe directory

Test Run

Change the format of an image file

      ⍝ Use .LoadFromFile and .SaveToFile to load and save a file to a different format with the default options.
      ⍝ See the comments of each methods for details.

      bmp ← ⎕NEW netFreeImage
      bmp.LoadFromFile 'd:\image.tiff'       ⍝ Load the bitmap as a tiff file
1
      bmp.SaveToFile 'd:\image.jpeg'         ⍝ Save as jpeg file with default options
1

Bitmap file to Png file with different bit depth

      bmp ← ⎕NEW netFreeImage
      bmp.LoadFromFile 'd:\image.bmp'  ⍝ Load the bitmap
1
      bmp.Info                         ⍝ Show useful information about the loaded bitmap
      bmp.ConvertTo8Bits               ⍝ Convert to a palette with 256 colors
1
      bmp.Show                         ⍝ Look if satisfactory
      cmap  ← bmp.GetPalette           ⍝ Get the 256 colors of the palette
      cbits ← bmp.GetPixelsColors      ⍝ Get an array with the colors as 256⊥(R G B)
      bmp.SaveToFile 'd:\image.png'    ⍝ Save to png file
1

Prepare Jpeg file for Web

      bmp ← ⎕NEW netFreeImage
      bmp.LoadFromFile 'd:\image.jpeg'  ⍝ Load the bitmap
1
      bmp.Resize 250 200                ⍝ Resize to new width and height
1
      bmp.Show                          ⍝ Look if satisfactory

      bmp.GetMetadata                   ⍝ Get a Key/Value pair for each MetaData

    ⍝ Save for web: 512=compression ration 50:1, 8192=progressive, 262144=remove metadata
      (512+8192+262144) bmp.SaveToFile 'd:\imageWeb.jpeg'
1

Version Information

 Version 1.0 April 2016, Pierre Gilbert


 Version 1.1 April 2016
             Methods added: CopyToClipboard, PasteFromClipboard

Original author:

Pierre Gilbert

Responsible:

PierreGilbert

Email:

<apgil AT SPAMFREE videotron DOT ca>


CategoryDyalog - CategoryDyalogDotNet - CategoryDotNet - CategoryDyalogDotNetUtilities

netFreeImage (last edited 2016-04-20 15:44:30 by PierreGilbert)