Class MemoryByteChannelImage

java.lang.Object
net.sourceforge.jiu.data.MemoryByteChannelImage
All Implemented Interfaces:
ByteChannelImage, IntegerImage, PixelImage
Direct Known Subclasses:
MemoryGray8Image, MemoryPaletted8Image, MemoryRGB24Image

public abstract class MemoryByteChannelImage extends Object implements ByteChannelImage
An implementation of ByteChannelImage that stores image channels as byte[] arrays in memory. An image can have an arbitrary number of channels.

This class is abstract because it is merely a data container. It takes a subclass like MemoryGray8Image to give meaning to the values.

Author:
Marco Schmidt
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final byte[][]
     
    private final byte[]
     
    private final int
     
    private final int
     
    private final int
     
    private final int
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    MemoryByteChannelImage(int numChannels, int width, int height)
    Create an image of byte channels.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    checkPositionAndNumber(int channel, int x, int y, int w, int h)
    Throws an exception if the arguments do not form a valid horizontal sequence of samples.
    void
    clear(byte newValue)
    Sets all samples of the first channel to the argument byte value.
    void
    clear(int newValue)
    Sets all samples in the first channel to the argument value.
    void
    clear(int channelIndex, byte newValue)
    Sets all samples of one channel to a new value.
    void
    clear(int channelIndex, int newValue)
    Sets all samples of the channelIndex'th channel to newValue.
    abstract PixelImage
    createCompatibleImage(int width, int height)
    Creates an instance of the same class as this one, with width and height given by the arguments.
    Creates an new image object that will be of the same type as this one, with the same image data, using entirely new resources.
    long
    Returns the number of bytes that were dynamically allocated for this image object.
    int
    Returns the number of bits per pixel of this image.
    byte
    getByteSample(int x, int y)
    Returns a single byte sample from the first channel and the specified position.
    byte
    getByteSample(int channel, int x, int y)
    Returns a single byte sample from the image.
    void
    getByteSamples(int channel, int x, int y, int w, int h, byte[] dest, int destOffset)
    Copies samples from this image to a byte array.
    final int
    Returns the vertical resolution of the image in pixels.
    int
    getMaxSample(int channel)
    Returns the maximum value for one of the image's channels.
    int
    Returns the number of channels in this image.
    final int
    getSample(int x, int y)
    Returns one sample of the first channel (index 0).
    final int
    getSample(int channel, int x, int y)
    Returns one sample, specified by its channel index and location.
    void
    getSamples(int channel, int x, int y, int w, int h, int[] dest, int destOffs)
    Copies a number of samples from this image to an int[] object.
    final int
    Returns the horizontal resolution of the image in pixels.
    final void
    putByteSample(int x, int y, byte newValue)
    Sets one byte sample in the first channel (index 0) to a new value.
    final void
    putByteSample(int channel, int x, int y, byte newValue)
    Sets one byte sample in one channel to a new value.
    void
    putByteSamples(int channel, int x, int y, int w, int h, byte[] src, int srcOffset)
    Copies a number of samples from the argument array to this image.
    final void
    putSample(int x, int y, int newValue)
    This method sets one sample of the first channel (index 0) to a new value.
    final void
    putSample(int channel, int x, int y, int newValue)
    This method sets one sample to a new value.
    void
    putSamples(int channel, int x, int y, int w, int h, int[] src, int srcOffs)
    Copies a number of samples from an int[] array to this image.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface net.sourceforge.jiu.data.PixelImage

    getImageType
  • Field Details

    • data

      private final byte[][] data
    • firstChannel

      private final byte[] firstChannel
    • numChannels

      private final int numChannels
    • width

      private final int width
    • height

      private final int height
    • numPixels

      private final int numPixels
  • Constructor Details

    • MemoryByteChannelImage

      public MemoryByteChannelImage(int numChannels, int width, int height)
      Create an image of byte channels. Image data will be completely in memory, so memory requirements are width * height * numChannels bytes. Note that the data will not be initialized, so you should not assume anything about its content.
      Parameters:
      numChannels - the number of channels in this image, must be non-zero and positive
      width - the horizontal resolution, must be non-zero and positive
      height - the vertical resolution, must be non-zero and positive
  • Method Details

    • checkPositionAndNumber

      protected void checkPositionAndNumber(int channel, int x, int y, int w, int h)
      Throws an exception if the arguments do not form a valid horizontal sequence of samples. To be valid, all of the following requirements must be met:
    • clear

      public void clear(byte newValue)
      Description copied from interface: ByteChannelImage
      Sets all samples of the first channel to the argument byte value. Equal to clear(0, newValue);.
      Specified by:
      clear in interface ByteChannelImage
      Parameters:
      newValue - all samples in the first channel are set to this value
      See Also:
    • clear

      public void clear(int channelIndex, byte newValue)
      Description copied from interface: ByteChannelImage
      Sets all samples of one channel to a new value.
      Specified by:
      clear in interface ByteChannelImage
      Parameters:
      channelIndex - zero-based index of the channel to be cleared (must be smaller than PixelImage.getNumChannels()
      newValue - all samples in the channel will be set to this value
    • clear

      public void clear(int newValue)
      Description copied from interface: IntegerImage
      Sets all samples in the first channel to the argument value. Equal to clear(0, newValue);:
      Specified by:
      clear in interface IntegerImage
    • clear

      public void clear(int channelIndex, int newValue)
      Description copied from interface: IntegerImage
      Sets all samples of the channelIndex'th channel to newValue.
      Specified by:
      clear in interface IntegerImage
    • createCompatibleImage

      public abstract PixelImage createCompatibleImage(int width, int height)
      Description copied from interface: PixelImage
      Creates an instance of the same class as this one, with width and height given by the arguments.
      Specified by:
      createCompatibleImage in interface PixelImage
      Parameters:
      width - the horizontal resolution of the new image
      height - the vertical resolution of the new image
      Returns:
      the new image
    • createCopy

      public PixelImage createCopy()
      Description copied from interface: PixelImage
      Creates an new image object that will be of the same type as this one, with the same image data, using entirely new resources.
      Specified by:
      createCopy in interface PixelImage
      Returns:
      the new image object
    • getAllocatedMemory

      public long getAllocatedMemory()
      Description copied from interface: PixelImage
      Returns the number of bytes that were dynamically allocated for this image object.
      Specified by:
      getAllocatedMemory in interface PixelImage
      Returns:
      allocated memory in bytes
    • getBitsPerPixel

      public int getBitsPerPixel()
      Description copied from interface: PixelImage
      Returns the number of bits per pixel of this image. That is the number of bits per sample for all channels of this image. Does not include any transparency channels.
      Specified by:
      getBitsPerPixel in interface PixelImage
    • getByteSample

      public byte getByteSample(int channel, int x, int y)
      Description copied from interface: ByteChannelImage
      Returns a single byte sample from the image. When possible, try copying several samples at a time for higher speed (ByteChannelImage.getByteSamples(int, int, int, int, int, byte[], int)).
      Specified by:
      getByteSample in interface ByteChannelImage
      Parameters:
      channel - the number of the channel of the sample; must be from 0 to PixelImage.getNumChannels() - 1
      x - the column of the sample to be returned; must be from 0 to PixelImage.getWidth() - 1
      y - the row of the sample; must be from 0 to PixelImage.getHeight() - 1
      Returns:
      the sample, a single byte value
      See Also:
    • getByteSample

      public byte getByteSample(int x, int y)
      Description copied from interface: ByteChannelImage
      Returns a single byte sample from the first channel and the specified position. A call to this method is the same as getByteSample(0, x, y).
      Specified by:
      getByteSample in interface ByteChannelImage
      Parameters:
      x - horizontal position of the sample to be returned (must be between 0 and PixelImage.getWidth() - 1
      y - vertical position of the sample to be returned (must be between 0 and PixelImage.getHeight() - 1
      Returns:
      the requested byte sample
    • getByteSamples

      public void getByteSamples(int channel, int x, int y, int w, int h, byte[] dest, int destOffset)
      Description copied from interface: ByteChannelImage
      Copies samples from this image to a byte array. Copies num samples in row y of channel channel, starting at horizontal offset x. Data will be written to the dest array, starting at offset destOffset. Data will be copied from one row only, so a maximum of getWidth() samples can be copied with a call to this method.
      Specified by:
      getByteSamples in interface ByteChannelImage
      Parameters:
      channel - the index of the channel to be copied from; must be from 0 to getNumChannels() - 1
      x - the horizontal offset where copying will start; must be from 0 to getWidth() - 1
      y - the row from which will be copied; must be from 0 to getHeight() - 1
      w - the number of columns to be copied
      h - the number of rows to be copied
      dest - the array where the data will be copied to; must have a length of at least destOffset + num
      destOffset - the offset into dest where this method will start copying data
    • getHeight

      public final int getHeight()
      Description copied from interface: PixelImage
      Returns the vertical resolution of the image in pixels. Must be one or larger.
      Specified by:
      getHeight in interface PixelImage
      Returns:
      height in pixels
    • getMaxSample

      public int getMaxSample(int channel)
      Description copied from interface: IntegerImage
      Returns the maximum value for one of the image's channels. The minimum value is always 0.
      Specified by:
      getMaxSample in interface IntegerImage
      Parameters:
      channel - zero-based index of the channel, from 0 to PixelImage.getNumChannels() - 1
      Returns:
      maximum allowed sample value
    • getNumChannels

      public int getNumChannels()
      Description copied from interface: PixelImage
      Returns the number of channels in this image. Must be one or larger.
      Specified by:
      getNumChannels in interface PixelImage
      Returns:
      the number of channels
    • getSample

      public final int getSample(int x, int y)
      Description copied from interface: IntegerImage
      Returns one sample of the first channel (index 0). A call to this method must have the same result as the call getSample(0, x, y);.
      Specified by:
      getSample in interface IntegerImage
      Parameters:
      x - the horizontal position of the sample, from 0 to PixelImage.getWidth() - 1
      y - the vertical position of the sample, from 0 to PixelImage.getHeight() - 1
      Returns:
      the desired sample
    • getSample

      public final int getSample(int channel, int x, int y)
      Description copied from interface: IntegerImage
      Returns one sample, specified by its channel index and location.
      Specified by:
      getSample in interface IntegerImage
      Parameters:
      channel - the number of the channel, from 0 to PixelImage.getNumChannels() - 1
      x - the horizontal position of the sample, from 0 to PixelImage.getWidth() - 1
      y - the vertical position of the sample, from 0 to PixelImage.getHeight() - 1
      Returns:
      the desired sample
    • getSamples

      public void getSamples(int channel, int x, int y, int w, int h, int[] dest, int destOffs)
      Description copied from interface: IntegerImage
      Copies a number of samples from this image to an int[] object. A rectangular part of one channel is copied. The channel index is given by - the upper left corner of that rectangle is given by the point x / y. Width and height of that rectangle are given by w and h. Each sample will be stored as one int value dest, starting at index destOffs.
      Specified by:
      getSamples in interface IntegerImage
      Parameters:
      channel - zero-based index of the channel from which data is to be copied (valid values: 0 to PixelImage.getNumChannels() - 1)
      x - horizontal position of upper left corner of the rectangle to be copied
      y - vertical position of upper left corner of the rectangle to be copied
      w - width of rectangle to be copied
      h - height of rectangle to be copied
      dest - int array to which the samples will be copied
      destOffs - int index into the dest array for the position to which the samples will be copied
    • getWidth

      public final int getWidth()
      Description copied from interface: PixelImage
      Returns the horizontal resolution of the image in pixels. Must be one or larger.
      Specified by:
      getWidth in interface PixelImage
      Returns:
      width in pixels
    • putByteSample

      public final void putByteSample(int channel, int x, int y, byte newValue)
      Description copied from interface: ByteChannelImage
      Sets one byte sample in one channel to a new value.
      Specified by:
      putByteSample in interface ByteChannelImage
    • putByteSample

      public final void putByteSample(int x, int y, byte newValue)
      Description copied from interface: ByteChannelImage
      Sets one byte sample in the first channel (index 0) to a new value. Result is equal to putByteSample(0, x, y, newValue);.
      Specified by:
      putByteSample in interface ByteChannelImage
    • putByteSamples

      public void putByteSamples(int channel, int x, int y, int w, int h, byte[] src, int srcOffset)
      Description copied from interface: ByteChannelImage
      Copies a number of samples from the argument array to this image.
      Specified by:
      putByteSamples in interface ByteChannelImage
    • putSamples

      public void putSamples(int channel, int x, int y, int w, int h, int[] src, int srcOffs)
      Description copied from interface: IntegerImage
      Copies a number of samples from an int[] array to this image. A rectangular part of one channel is copied - the upper left corner of that rectangle is given by the point x / y. Width and height of that rectangle are given by w and h. Each sample will be stored as one int value src, starting at index srcOffset.
      Specified by:
      putSamples in interface IntegerImage
      Parameters:
      channel - int (from 0 to getNumChannels() - 1) to indicate the channel to which data is copied
      x - horizontal position of upper left corner of the rectangle to be copied
      y - vertical position of upper left corner of the rectangle to be copied
      w - width of rectangle to be copied
      h - height of rectangle to be copied
      src - int array from which the samples will be copied
      srcOffs - int index into the src array for the position from which the samples will be copied
    • putSample

      public final void putSample(int x, int y, int newValue)
      Description copied from interface: IntegerImage
      This method sets one sample of the first channel (index 0) to a new value. This call must have the same result as the call putSample(0, x, y). The sample location is given by the spatial coordinates, x and y.
      Specified by:
      putSample in interface IntegerImage
      Parameters:
      x - the horizontal position of the sample, from 0 to PixelImage.getWidth() - 1
      y - the vertical position of the sample, from 0 to PixelImage.getHeight() - 1
      newValue - the new value of the sample
    • putSample

      public final void putSample(int channel, int x, int y, int newValue)
      Description copied from interface: IntegerImage
      This method sets one sample to a new value. The sample location is given by the channel index and the spatial coordinates, x and y.
      Specified by:
      putSample in interface IntegerImage
      Parameters:
      channel - the number of the channel, from 0 to PixelImage.getNumChannels() - 1
      x - the horizontal position of the sample, from 0 to PixelImage.getWidth() - 1
      y - the vertical position of the sample, from 0 to PixelImage.getHeight() - 1
      newValue - the new value of the sample