Class DDSImageWriter

  • All Implemented Interfaces:
    javax.imageio.ImageTranscoder

    class DDSImageWriter
    extends ImageWriterBase
    ImageWriter implementation for Microsoft DirectDraw Surface (DDS) format.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected DDSImageWriter​(javax.imageio.spi.ImageWriterSpi provider)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean canWriteRasters()  
      boolean canWriteSequence()  
      javax.imageio.metadata.IIOMetadata convertImageMetadata​(javax.imageio.metadata.IIOMetadata inData, javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)  
      void endWriteSequence()  
      private void ensureImageChannels​(java.awt.image.Raster data)
      Checking if the image has 3 channels (RGB) or 4 channels (RGBA) and if image has 8 bits/channel.
      private void ensureTextureDimension​(java.awt.image.Raster raster)
      Checking if an image can be evenly divided into blocks of 4x4, ideally a power of 2.
      javax.imageio.metadata.IIOMetadata getDefaultImageMetadata​(javax.imageio.ImageTypeSpecifier imageType, javax.imageio.ImageWriteParam param)  
      DDSImageWriteParam getDefaultWriteParam()  
      private static java.awt.image.Raster getRaster​(javax.imageio.IIOImage image)  
      static void main​(java.lang.String[] args)  
      void prepareWriteSequence​(javax.imageio.metadata.IIOMetadata streamMetadata)  
      protected void resetMembers()  
      private void updateHeader​(int mipmapCount)  
      void write​(javax.imageio.metadata.IIOMetadata streamMetadata, javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)  
      private void writeDXT10Header​(int dxgiFormat)  
      private void writeFourCC​(DDSType type, boolean writeDXT10)  
      private void writeHeader​(int width, int height, DDSType type, boolean writeDXT10)  
      private void writePitchOrLinearSize​(int height, int width, DDSType type)  
      private void writePixelFormat​(DDSType type, boolean writeDXT10)  
      private void writePixelFormatFlags​(DDSType type, boolean writeDXT10)  
      private void writeRGBAData​(DDSType type, boolean writeDXT10)  
      void writeToSequence​(javax.imageio.IIOImage image, javax.imageio.ImageWriteParam param)  
      • Methods inherited from class javax.imageio.ImageWriter

        abort, abortRequested, addIIOWriteProgressListener, addIIOWriteWarningListener, canInsertEmpty, canInsertImage, canRemoveImage, canReplaceImageMetadata, canReplacePixels, canReplaceStreamMetadata, canWriteEmpty, clearAbortRequest, endInsertEmpty, endReplacePixels, endWriteEmpty, getAvailableLocales, getLocale, getNumThumbnailsSupported, getOriginatingProvider, getOutput, getPreferredThumbnailSizes, prepareInsertEmpty, prepareReplacePixels, prepareWriteEmpty, processImageComplete, processImageProgress, processImageStarted, processThumbnailComplete, processThumbnailProgress, processThumbnailStarted, processWarningOccurred, processWarningOccurred, processWriteAborted, removeAllIIOWriteProgressListeners, removeAllIIOWriteWarningListeners, removeIIOWriteProgressListener, removeIIOWriteWarningListener, removeImage, replaceImageMetadata, replacePixels, replacePixels, replaceStreamMetadata, setLocale, write, write, writeInsert
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • headerStartPos

        private long headerStartPos
      • mipmapType

        private DDSType mipmapType
      • mipmapDimension

        private java.awt.Dimension mipmapDimension
    • Constructor Detail

      • DDSImageWriter

        protected DDSImageWriter​(javax.imageio.spi.ImageWriterSpi provider)
    • Method Detail

      • getDefaultWriteParam

        public DDSImageWriteParam getDefaultWriteParam()
        Overrides:
        getDefaultWriteParam in class javax.imageio.ImageWriter
      • canWriteRasters

        public boolean canWriteRasters()
        Overrides:
        canWriteRasters in class javax.imageio.ImageWriter
      • canWriteSequence

        public boolean canWriteSequence()
        Overrides:
        canWriteSequence in class javax.imageio.ImageWriter
      • prepareWriteSequence

        public void prepareWriteSequence​(javax.imageio.metadata.IIOMetadata streamMetadata)
                                  throws java.io.IOException
        Overrides:
        prepareWriteSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • endWriteSequence

        public void endWriteSequence()
                              throws java.io.IOException
        Overrides:
        endWriteSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • write

        public void write​(javax.imageio.metadata.IIOMetadata streamMetadata,
                          javax.imageio.IIOImage image,
                          javax.imageio.ImageWriteParam param)
                   throws java.io.IOException
        Specified by:
        write in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • writeToSequence

        public void writeToSequence​(javax.imageio.IIOImage image,
                                    javax.imageio.ImageWriteParam param)
                             throws java.io.IOException
        Overrides:
        writeToSequence in class javax.imageio.ImageWriter
        Throws:
        java.io.IOException
      • getRaster

        private static java.awt.image.Raster getRaster​(javax.imageio.IIOImage image)
                                                throws javax.imageio.IIOException
        Throws:
        javax.imageio.IIOException
      • ensureImageChannels

        private void ensureImageChannels​(java.awt.image.Raster data)
                                  throws javax.imageio.IIOException
        Checking if the image has 3 channels (RGB) or 4 channels (RGBA) and if image has 8 bits/channel.
        Throws:
        javax.imageio.IIOException
        See Also:
        DDSImageWriterSpi.canEncodeImage(ImageTypeSpecifier)
      • ensureTextureDimension

        private void ensureTextureDimension​(java.awt.image.Raster raster)
                                     throws javax.imageio.IIOException
        Checking if an image can be evenly divided into blocks of 4x4, ideally a power of 2. e.g. 16x16, 32x32, 512x128, 512x512, 1024x512, 1024x1024, 2048x1024...
        Throws:
        javax.imageio.IIOException
      • writeHeader

        private void writeHeader​(int width,
                                 int height,
                                 DDSType type,
                                 boolean writeDXT10)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • updateHeader

        private void updateHeader​(int mipmapCount)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writePixelFormat

        private void writePixelFormat​(DDSType type,
                                      boolean writeDXT10)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • writeDXT10Header

        private void writeDXT10Header​(int dxgiFormat)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • writeRGBAData

        private void writeRGBAData​(DDSType type,
                                   boolean writeDXT10)
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • writeFourCC

        private void writeFourCC​(DDSType type,
                                 boolean writeDXT10)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • writePixelFormatFlags

        private void writePixelFormatFlags​(DDSType type,
                                           boolean writeDXT10)
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • writePitchOrLinearSize

        private void writePitchOrLinearSize​(int height,
                                            int width,
                                            DDSType type)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • getDefaultImageMetadata

        public javax.imageio.metadata.IIOMetadata getDefaultImageMetadata​(javax.imageio.ImageTypeSpecifier imageType,
                                                                          javax.imageio.ImageWriteParam param)
        Specified by:
        getDefaultImageMetadata in class javax.imageio.ImageWriter
      • convertImageMetadata

        public javax.imageio.metadata.IIOMetadata convertImageMetadata​(javax.imageio.metadata.IIOMetadata inData,
                                                                       javax.imageio.ImageTypeSpecifier imageType,
                                                                       javax.imageio.ImageWriteParam param)
        Specified by:
        convertImageMetadata in interface javax.imageio.ImageTranscoder
        Specified by:
        convertImageMetadata in class javax.imageio.ImageWriter
      • main

        public static void main​(java.lang.String[] args)
                         throws java.io.IOException
        Throws:
        java.io.IOException