Package org.apache.sanselan.common

Examples of org.apache.sanselan.common.BinaryOutputStream


        else if (palette.length() <= 16)
            bitCount = 4;
        else
            bitCount = 8;

        BinaryOutputStream bos = new BinaryOutputStream(os, BYTE_ORDER_INTEL);

        int scanline_size = (bitCount * src.getWidth() + 7) / 8;
        if ((scanline_size % 4) != 0)
            scanline_size += 4 - (scanline_size % 4); // pad scanline to 4 byte size.
        int t_scanline_size = (src.getWidth() + 7) / 8;
        if ((t_scanline_size % 4) != 0)
            t_scanline_size += 4 - (t_scanline_size % 4); // pad scanline to 4 byte size.
        int imageSize = 40 + 4 * (bitCount <= 8 ? (1 << bitCount) : 0) +
                src.getHeight() * scanline_size +
                src.getHeight() * t_scanline_size;

        // ICONDIR
        bos.write2Bytes(0); // reserved
        bos.write2Bytes(1); // 1=ICO, 2=CUR
        bos.write2Bytes(1); // count

        // ICONDIRENTRY
        int iconDirEntryWidth = src.getWidth();
        int iconDirEntryHeight = src.getHeight();
        if (iconDirEntryWidth > 255 || iconDirEntryHeight > 255)
        {
            iconDirEntryWidth = 0;
            iconDirEntryHeight = 0;
        }
        bos.write(iconDirEntryWidth);
        bos.write(iconDirEntryHeight);
        bos.write((bitCount >= 8) ? 0 : (1 << bitCount));
        bos.write(0); // reserved
        bos.write2Bytes(1); // color planes
        bos.write2Bytes(bitCount);
        bos.write4Bytes(imageSize);
        bos.write4Bytes(22); // image offset

        // BITMAPINFOHEADER
        bos.write4Bytes(40); // size
        bos.write4Bytes(src.getWidth());
        bos.write4Bytes(2 * src.getHeight());
        bos.write2Bytes(1); // planes
        bos.write2Bytes(bitCount);
        bos.write4Bytes(0); // compression
        bos.write4Bytes(0); // image size
        bos.write4Bytes(0); // x pixels per meter
        bos.write4Bytes(0); // y pixels per meter
        bos.write4Bytes(0); // colors used, 0 = (1 << bitCount) (ignored)
        bos.write4Bytes(0); // colors important

        if (palette != null)
        {
            for (int i = 0; i < (1 << bitCount); i++)
            {
                if (i < palette.length())
                {
                    int argb = palette.getEntry(i);
                    bos.write(0xff & argb);
                    bos.write(0xff & (argb >> 8));
                    bos.write(0xff & (argb >> 16));
                    bos.write(0);
                }
                else
                {
                    bos.write(0);
                    bos.write(0);
                    bos.write(0);
                    bos.write(0);
                }
            }
        }

        int bit_cache = 0;
        int bits_in_cache = 0;
        int row_padding = scanline_size - (bitCount * src.getWidth() + 7) / 8;
        for (int y = src.getHeight() - 1; y >= 0; y--)
        {
            for (int x = 0; x < src.getWidth(); x++)
            {
                int argb = src.getRGB(x, y);
                if (bitCount < 8)
                {
                    int rgb = 0xffffff & argb;
                    int index = palette.getPaletteIndex(rgb);
                    bit_cache <<= bitCount;
                    bit_cache |= index;
                    bits_in_cache += bitCount;
                    if (bits_in_cache >= 8)
                    {
                        bos.write(0xff & bit_cache);
                        bit_cache = 0;
                        bits_in_cache = 0;
                    }
                }
                else if (bitCount == 8)
                {
                    int rgb = 0xffffff & argb;
                    int index = palette.getPaletteIndex(rgb);
                    bos.write(0xff & index);
                }
                else if (bitCount == 24)
                {
                    bos.write(0xff & argb);
                    bos.write(0xff & (argb >> 8));
                    bos.write(0xff & (argb >> 16));
                }
                else if (bitCount == 32)
                {
                    bos.write(0xff & argb);
                    bos.write(0xff & (argb >> 8));
                    bos.write(0xff & (argb >> 16));
                    bos.write(0xff & (argb >> 24));
                }
            }

            if (bits_in_cache > 0)
            {
                bit_cache <<= (8 - bits_in_cache);
                bos.write(0xff & bit_cache);
                bit_cache = 0;
                bits_in_cache = 0;
            }

            for (int x = 0; x < row_padding; x++)
                bos.write(0);
        }

        int t_row_padding = t_scanline_size - (src.getWidth() + 7) / 8;
        for (int y = src.getHeight() - 1; y >= 0; y--)
        {
            for (int x = 0; x < src.getWidth(); x++)
            {
                int argb = src.getRGB(x, y);
                int alpha = 0xff & (argb >> 24);
                bit_cache <<= 1;
                if (alpha == 0)
                    bit_cache |= 1;
                bits_in_cache++;
                if (bits_in_cache >= 8)
                {
                    bos.write(0xff & bit_cache);
                    bit_cache = 0;
                    bits_in_cache = 0;
                }
            }

            if (bits_in_cache > 0)
            {
                bit_cache <<= (8 - bits_in_cache);
                bos.write(0xff & bit_cache);
                bit_cache = 0;
                bits_in_cache = 0;
            }

            for (int x = 0; x < t_row_padding; x++)
                bos.write(0);
        }
    }
View Full Code Here


        int bitmapPixelsOffset = 14 + 56 +
                4 * ((ColorsUsed == 0 && BitCount <= 8) ? (1 << BitCount) : ColorsUsed);
        int bitmapSize = 14 + 56 + RestOfFile.length;

        ByteArrayOutputStream baos = new ByteArrayOutputStream(bitmapSize);
        BinaryOutputStream bos = new BinaryOutputStream(baos,
                BinaryOutputStream.BYTE_ORDER_LITTLE_ENDIAN);

        bos.write('B');
        bos.write('M');
        bos.write4Bytes(bitmapSize);
        bos.write4Bytes(0);
        bos.write4Bytes(bitmapPixelsOffset);

        bos.write4Bytes(56);
        bos.write4Bytes(Width);
        bos.write4Bytes(Height / 2);
        bos.write2Bytes(Planes);
        bos.write2Bytes(BitCount);
        bos.write4Bytes(Compression);
        bos.write4Bytes(SizeImage);
        bos.write4Bytes(XPelsPerMeter);
        bos.write4Bytes(YPelsPerMeter);
        bos.write4Bytes(ColorsUsed);
        bos.write4Bytes(ColorsImportant);
        bos.write4Bytes(RedMask);
        bos.write4Bytes(GreenMask);
        bos.write4Bytes(BlueMask);
        bos.write4Bytes(AlphaMask);
        bos.write(RestOfFile);
        bos.flush();

        ByteArrayInputStream bmpInputStream = new ByteArrayInputStream(baos.toByteArray());
        BufferedImage bmpImage = new BmpImageParser().getBufferedImage(bmpInputStream, null);

        // Transparency map is optional with 32 BPP icons, because they already have
View Full Code Here

    {
        public byte[] generateBitmap(int foreground, int background, int paletteSize)
                throws IOException, ImageWriteException
        {
            ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
            BinaryOutputStream bos = new BinaryOutputStream(byteArrayStream,
                    BinaryOutputStream.BYTE_ORDER_LITTLE_ENDIAN);
            // Palette
            bos.write3Bytes(background);
            bos.write(0);
            bos.write3Bytes(foreground);
            bos.write(0);
            for (int i = 2; i < paletteSize; i++)
                bos.write4Bytes(0);
            // Image
            for (int y = 15; y >= 0; y--)
            {
                for (int x = 0; x < 16; x++)
                {
                    bos.write(image[y][x]);
                }
            }
            // Mask
            for (int y = image.length - 1; y >= 0; y--)
            {
                bos.write(0);
                bos.write(0);
                // Pad to 4 bytes:
                bos.write(0);
                bos.write(0);
            }
            bos.flush();
            return byteArrayStream.toByteArray();
        }
View Full Code Here

    {
        public byte[] generateBitmap(int foreground, int background, int paletteSize)
                throws IOException, ImageWriteException
        {
            ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
            BinaryOutputStream bos = new BinaryOutputStream(byteArrayStream,
                    BinaryOutputStream.BYTE_ORDER_LITTLE_ENDIAN);
            // Palette
            for (int i = 0; i < paletteSize; i++)
                bos.write4Bytes(0);
            // Image
            for (int y = 15; y >= 0; y--)
            {
                for (int x = 0; x < 16; x++)
                {
                    if (image[y][x] == 1)
                        bos.write2Bytes((0x1f & (foreground >> 3)) |
                                ((0x1f & (foreground >> 11)) << 5) |
                                ((0x1f & (foreground >> 19)) << 10));
                    else
                        bos.write2Bytes((0x1f & (background >> 3)) |
                                ((0x1f & (background >> 11)) << 5) |
                                ((0x1f & (background >> 19)) << 10));
                }
            }
            // Mask
            for (int y = image.length - 1; y >= 0; y--)
            {
                bos.write(0);
                bos.write(0);
                // Pad to 4 bytes:
                bos.write(0);
                bos.write(0);
            }
            bos.flush();
            return byteArrayStream.toByteArray();
        }
View Full Code Here

  public void test1BPPIconMaskVersus8BPPMask() throws ImageReadException, ImageWriteException, IOException
  {
    final int foreground = 0xff000000;
    final int background = 0xff000000;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BinaryOutputStream bos = new BinaryOutputStream(baos,
        BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
    bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
    bos.write4Bytes(4 + 4 + 4 + 4 + 2*16*16/8 + 4 + 4 + 16*16);
    bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
    bos.write4Bytes(4 + 4 + 2*16*16/8);
    // 1 BPP image - all black
    for (int y = 0; y < 16; y++)
    {
      bos.write(0xff);
      bos.write(0xff);
    }
    // 1 BPP mask - all opaque
    for (int y = 0; y < 16; y++)
    {
      bos.write(0xff);
      bos.write(0xff);
    }
    // 8 BPP alpha mask - partially transparent
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(0x00);
      }
    }
    bos.flush();
    writeAndReadImageData("1bpp-image-mask-versus-8bpp-mask",
        baos.toByteArray(), foreground, background);
  }
View Full Code Here

    {
        public byte[] generateBitmap(int foreground, int background, int paletteSize)
                throws IOException, ImageWriteException
        {
            ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
            BinaryOutputStream bos = new BinaryOutputStream(byteArrayStream,
                    BinaryOutputStream.BYTE_ORDER_LITTLE_ENDIAN);
            // Palette
            for (int i = 0; i < paletteSize; i++)
                bos.write4Bytes(0);
            // Image
            for (int y = 15; y >= 0; y--)
            {
                for (int x = 0; x < 16; x++)
                {
                    if (image[y][x] == 1)
                        bos.write3Bytes(0xffffff & foreground);
                    else
                        bos.write3Bytes(0xffffff & background);
                }
            }
            // Mask
            for (int y = image.length - 1; y >= 0; y--)
            {
                bos.write(0);
                bos.write(0);
                // Pad to 4 bytes:
                bos.write(0);
                bos.write(0);
            }
            bos.flush();
            return byteArrayStream.toByteArray();
        }
View Full Code Here

  public void test8BPPIcon8BPPMask() throws ImageReadException, ImageWriteException, IOException
  {
    final int foreground = 0xff000000;
    final int background = 0x00cccccc;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BinaryOutputStream bos = new BinaryOutputStream(baos,
        BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
    bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
    bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16);
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    // 8 BPP image
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(43);
      }
    }
    // 8 BPP alpha mask
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(0x00);
      }
    }
    bos.flush();
    writeAndReadImageData("8bpp-image-8bpp-mask", baos.toByteArray(), foreground, background);
  }
View Full Code Here

        public byte[] generate32bitRGBABitmap(int foreground, int background,
                int paletteSize, boolean writeMask) throws IOException,
                ImageWriteException
        {
            ByteArrayOutputStream byteArrayStream = new ByteArrayOutputStream();
            BinaryOutputStream bos = new BinaryOutputStream(byteArrayStream,
                    BinaryOutputStream.BYTE_ORDER_LITTLE_ENDIAN);
            // Palette
            for (int i = 0; i < paletteSize; i++)
                bos.write4Bytes(0);
            // Image
            for (int y = 15; y >= 0; y--)
            {
                for (int x = 0; x < 16; x++)
                {
                    if (image[y][x] == 1)
                        bos.write4Bytes(foreground);
                    else
                        bos.write4Bytes(background);
                }
            }
            // Mask
            if (writeMask)
            {
                for (int y = image.length - 1; y >= 0; y--)
                {
                    bos.write(0);
                    bos.write(0);
                    // Pad to 4 bytes:
                    bos.write(0);
                    bos.write(0);
                }
            }
            bos.flush();
            return byteArrayStream.toByteArray();
        }
View Full Code Here

      throws ImageReadException, ImageWriteException, IOException
  {
    final int foreground = 0xff000000;
    final int background = 0x00cccccc;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BinaryOutputStream bos = new BinaryOutputStream(baos,
        BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
    bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
    bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 2*16*16/8);
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    // 8 BPP image
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(43);
      }
    }
    // 8 BPP alpha mask, some transparent
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(0x00);
      }
    }
    // 1 BPP mask
    bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
    bos.write4Bytes(4 + 4 + 2*16*16/8);
    // 1 bit image
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x += 8)
      {
        int eightBits = 0;
        for (int pos = 0; pos < 8; pos++)
        {
          if (image[y][x+pos] != 0)
            eightBits |= (1 << (7 - pos));
        }
        bos.write(eightBits);
      }
    }
    // 1 bit mask, all opaque
    for (int y = 0; y < 16; y++)
    {
      bos.write(0xff);
      bos.write(0xff);
    }
    bos.flush();
    writeAndReadImageData("8bpp-image-8bpp-mask-vs-1bpp-mask",
        baos.toByteArray(), foreground, background);
  }
View Full Code Here

      throws ImageReadException, ImageWriteException, IOException
  {
    final int foreground = 0xff000000;
    final int background = 0x00cccccc;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    BinaryOutputStream bos = new BinaryOutputStream(baos,
        BinaryOutputStream.BYTE_ORDER_BIG_ENDIAN);
    bos.write4Bytes(IcnsImageParser.ICNS_MAGIC);
    bos.write4Bytes(4 + 4 + 4 + 4 + 16*16 + 4 + 4 + 16*16 + 4 + 4 + 2*16*16/8);
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_IMAGE.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    // 8 BPP image
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(43);
      }
    }
    // 1 BPP mask
    bos.write4Bytes(IcnsType.ICNS_16x16_1BIT_IMAGE_AND_MASK.getType());
    bos.write4Bytes(4 + 4 + 2*16*16/8);
    // 1 bit image
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x += 8)
      {
        int eightBits = 0;
        for (int pos = 0; pos < 8; pos++)
        {
          if (image[y][x+pos] != 0)
            eightBits |= (1 << (7 - pos));
        }
        bos.write(eightBits);
      }
    }
    // 1 bit mask, all opaque
    for (int y = 0; y < 16; y++)
    {
      bos.write(0xff);
      bos.write(0xff);
    }
    // 8 BPP alpha mask, some transparent
    bos.write4Bytes(IcnsType.ICNS_16x16_8BIT_MASK.getType());
    bos.write4Bytes(4 + 4 + 16*16);
    for (int y = 0; y < 16; y++)
    {
      for (int x = 0; x < 16; x++)
      {
        if (image[y][x] != 0)
          bos.write(0xff);
        else
          bos.write(0x00);
      }
    }
    bos.flush();
    writeAndReadImageData("8bpp-image-1bpp-mask-vs-8bpp-mask",
        baos.toByteArray(), foreground, background);
  }
View Full Code Here

TOP

Related Classes of org.apache.sanselan.common.BinaryOutputStream

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.