Examples of BinaryOutputStream


Examples of org.apache.sanselan.common.BinaryOutputStream

    if (palette2 == null)
      throw new ImageWriteException(
          "Gif: can't write images with more than 256 colors");
    int palette_size = palette2.length() + (hasAlpha ? 1 : 0);

    BinaryOutputStream bos = new BinaryOutputStream(os, BYTE_ORDER_LSB);

    {
      // write Header
      os.write(0x47); // G magic numbers
      os.write(0x49); // I
      os.write(0x46); // F

      os.write(0x38); // 8 version magic numbers
      os.write(0x39); // 9
      os.write(0x61); // a

      // Logical Screen Descriptor.

      bos.write2Bytes(width);
      bos.write2Bytes(height);

      int colorTableScaleLessOne = (palette_size > 128) ? 7
          : (palette_size > 64) ? 6 : (palette_size > 32) ? 5
              : (palette_size > 16) ? 4 : (palette_size > 8) ? 3
                  : (palette_size > 4) ? 2
                      : (palette_size > 2) ? 1 : 0;

      int colorTableSizeInFormat = 1 << (colorTableScaleLessOne + 1);
      int actual_size = 3 * simple_pow(2, colorTableScaleLessOne + 1);
      {
        byte colorResolution = (byte) colorTableScaleLessOne; // TODO:

        boolean globalColorTableFlag = false;
        boolean sortFlag = false;
        int globalColorTableFlagMask = 1 << 7;
        int sortFlagMask = 8;
        int sizeOfGlobalColorTable = 0;

        int packedFields = ((globalColorTableFlag ? globalColorTableFlagMask
            : 0)
            | (sortFlag ? sortFlagMask : 0)
            | ((7 & colorResolution) << 4) | (7 & sizeOfGlobalColorTable));
        bos.write(packedFields); // one byte
      }
      {
        byte BackgroundColorIndex = 0;
        bos.write(BackgroundColorIndex);
      }
      {
        byte PixelAspectRatio = 0;
        bos.write(PixelAspectRatio);
      }

      { // write Global Color Table.

      }

      { // ALWAYS write GraphicControlExtension
        bos.write(EXTENSION_CODE);
        bos.write((byte) 0xf9);
        // bos.write(0xff & (kGraphicControlExtension >> 8));
        // bos.write(0xff & (kGraphicControlExtension >> 0));

        bos.write((byte) 4); // block size;
        int packedFields = hasAlpha ? 1 : 0; // transparency flag
        bos.write((byte) packedFields);
        bos.write((byte) 0); // Delay Time
        bos.write((byte) 0); // Delay Time
        bos.write((byte) (hasAlpha ? palette2.length() : 0)); // Transparent
        // Color
        // Index
        bos.write((byte) 0); // terminator
      }

      if (null != xmpXml)
      {
        bos.write(EXTENSION_CODE);
        bos.write(APPLICATION_EXTENSION_LABEL);

        bos.write(XMP_APPLICATION_ID_AND_AUTH_CODE.length); // 0x0B
        bos.write(XMP_APPLICATION_ID_AND_AUTH_CODE);

        byte xmpXmlBytes[] = xmpXml.getBytes("utf-8");
        bos.write(xmpXmlBytes);

        // write "magic trailer"
        for (int magic = 0; magic <= 0xff; magic++)
          bos.write(0xff - magic);

        bos.write((byte) 0); // terminator

      }

      { // Image Descriptor.
        bos.write(IMAGE_SEPARATOR);
        bos.write2Bytes(0); // Image Left Position
        bos.write2Bytes(0); // Image Top Position
        bos.write2Bytes(width); // Image Width
        bos.write2Bytes(height); // Image Height

        {
          boolean LocalColorTableFlag = true;
          // boolean LocalColorTableFlag = false;
          boolean InterlaceFlag = false;
          boolean SortFlag = false;
          int SizeOfLocalColorTable = colorTableScaleLessOne;

          // int SizeOfLocalColorTable = 0;

          int PackedFields = ((LocalColorTableFlag ? LOCAL_COLOR_TABLE_FLAG_MASK
              : 0)
              | (InterlaceFlag ? INTERLACE_FLAG_MASK : 0)
              | (SortFlag ? SORT_FLAG_MASK : 0) | (7 & SizeOfLocalColorTable));
          bos.write(PackedFields); // one byte
        }
      }

      { // write Local Color Table.
        for (int i = 0; i < colorTableSizeInFormat; i++)
        {
          if (i < palette2.length())
          {
            int rgb = palette2.getEntry(i);

            int red = 0xff & (rgb >> 16);
            int green = 0xff & (rgb >> 8);
            int blue = 0xff & (rgb >> 0);

            bos.write(red);
            bos.write(green);
            bos.write(blue);
          } else
          {
            bos.write(0);
            bos.write(0);
            bos.write(0);
          }
        }
      }

      { // get Image Data.
        int image_data_total = 0;

        int LZWMinimumCodeSize = colorTableScaleLessOne + 1;
//        LZWMinimumCodeSize = Math.max(8, LZWMinimumCodeSize);
        if (LZWMinimumCodeSize < 2)
          LZWMinimumCodeSize = 2;

        // TODO:
        // make
        // better
        // choice
        // here.
        bos.write(LZWMinimumCodeSize);

        MyLZWCompressor compressor = new MyLZWCompressor(
            LZWMinimumCodeSize, BYTE_ORDER_LSB, false); // GIF
        // Mode);

        byte imagedata[] = new byte[width * height];
        for (int y = 0; y < height; y++)
        {
          for (int x = 0; x < width; x++)
          {
            int argb = src.getRGB(x, y);
            int rgb = 0xffffff & argb;
            int index;

            if (hasAlpha)
            {
              int alpha = 0xff & (argb >> 24);
              final int alphaThreshold = 255;
              if (alpha < alphaThreshold)
                index = palette2.length(); // is transparent
              else
                index = palette2.getPaletteIndex(rgb);
            } else
            {
              index = palette2.getPaletteIndex(rgb);
            }

            imagedata[y * width + x] = (byte) index;
          }
        }

        byte compressed[] = compressor.compress(imagedata);
        writeAsSubBlocks(bos, compressed);
        image_data_total += compressed.length;
      }

      // palette2.dump();

      bos.write(TERMINATOR_BYTE);
    }

    bos.close();
    os.close();
  }
View Full Code Here

Examples of org.apache.sanselan.common.BinaryOutputStream

  public byte[] writePhotoshopApp13Segment(PhotoshopApp13Data data)
      throws IOException, ImageWriteException
  {
    ByteArrayOutputStream os = new ByteArrayOutputStream();
    BinaryOutputStream bos = new BinaryOutputStream(os);

    bos.write(PHOTOSHOP_IDENTIFICATION_STRING);

    List blocks = data.getRawBlocks();
    for (int i = 0; i < blocks.size(); i++)
    {
      IPTCBlock block = (IPTCBlock) blocks.get(i);

      bos.write(CONST_8BIM);

      if (block.blockType < 0 || block.blockType > 0xffff)
        throw new ImageWriteException("Invalid IPTC block type.");
      bos.write2ByteInteger(block.blockType);

      if (block.blockNameBytes.length > 255)
        throw new ImageWriteException("IPTC block name is too long: "
            + block.blockNameBytes.length);
      bos.write(block.blockNameBytes.length);
      bos.write(block.blockNameBytes);
      if (block.blockNameBytes.length % 2 == 0)
        bos.write(0); // pad to even size, including length byte.

      if (block.blockData.length > IPTC_NON_EXTENDED_RECORD_MAXIMUM_SIZE)
        throw new ImageWriteException("IPTC block data is too long: "
            + block.blockData.length);
      bos.write4ByteInteger(block.blockData.length);
      bos.write(block.blockData);
      if (block.blockData.length % 2 == 1)
        bos.write(0); // pad to even size

    }

    bos.flush();
    return os.toByteArray();
  }
View Full Code Here

Examples of org.apache.sanselan.common.BinaryOutputStream

      IOException
  {
    byte blockData[];
    {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      BinaryOutputStream bos = new BinaryOutputStream(baos,
          getByteOrder());

      // first, right record version record
      bos.write(IPTC_RECORD_TAG_MARKER);
      bos.write(IPTC_APPLICATION_2_RECORD_NUMBER);
      bos.write(IPTC_TYPE_RECORD_VERSION.type); // record version record
                            // type.
      bos.write2Bytes(2); // record version record size
      bos.write2Bytes(2); // record version value

      // make a copy of the list.
      elements = new ArrayList(elements);

      // sort the list. Records must be in numerical order.
      Comparator comparator = new Comparator() {
        public int compare(Object o1, Object o2)
        {
          IPTCRecord e1 = (IPTCRecord) o1;
          IPTCRecord e2 = (IPTCRecord) o2;
          return e2.iptcType.type - e1.iptcType.type;
        }
      };
      Collections.sort(elements, comparator);
      // TODO: make sure order right

      // write the list.
      for (int i = 0; i < elements.size(); i++)
      {
        IPTCRecord element = (IPTCRecord) elements.get(i);

        if (element.iptcType.type == IPTC_TYPE_RECORD_VERSION.type)
          continue; // ignore

        bos.write(IPTC_RECORD_TAG_MARKER);
        bos.write(IPTC_APPLICATION_2_RECORD_NUMBER);
        if (element.iptcType.type < 0 || element.iptcType.type > 0xff)
          throw new ImageWriteException("Invalid record type: "
              + element.iptcType.type);
        bos.write(element.iptcType.type);

        byte recordData[] = element.value.getBytes("ISO-8859-1");
        if (!new String(recordData, "ISO-8859-1").equals(element.value))
          throw new ImageWriteException(
              "Invalid record value, not ISO-8859-1");

        bos.write2Bytes(recordData.length);
        bos.write(recordData);
      }

      blockData = baos.toByteArray();
    }
View Full Code Here

Examples of org.apache.sanselan.common.BinaryOutputStream

      writer = new BMPWriterRGB();
    else
      writer = new BMPWriterPalette(palette);

    byte imagedata[] = writer.getImageData(src);
    BinaryOutputStream bos = new BinaryOutputStream(os, BYTE_ORDER_INTEL);

    {
      // write BitmapFileHeader
      os.write(0x42); // B, Windows 3.1x, 95, NT, Bitmap
      os.write(0x4d); // M

      int filesize = BITMAP_FILE_HEADER_SIZE + BITMAP_INFO_HEADER_SIZE + // header
          // size
          4 * writer.getPaletteSize() + // palette size in bytes
          imagedata.length;
      bos.write4Bytes(filesize);

      bos.write4Bytes(0); // reserved
      bos.write4Bytes(BITMAP_FILE_HEADER_SIZE + BITMAP_INFO_HEADER_SIZE
          + 4 * writer.getPaletteSize()); // Bitmap Data Offset
    }

    int width = src.getWidth();
    int height = src.getHeight();

    { // write BitmapInfoHeader
      bos.write4Bytes(BITMAP_INFO_HEADER_SIZE); // Bitmap Info Header Size
      bos.write4Bytes(width); // width
      bos.write4Bytes(height); // height
      bos.write2Bytes(1); // Number of Planes
      bos.write2Bytes(writer.getBitsPerPixel()); // Bits Per Pixel

      bos.write4Bytes(BI_RGB); // Compression
      bos.write4Bytes(imagedata.length); // Bitmap Data Size
      bos.write4Bytes(0); // HResolution
      bos.write4Bytes(0); // VResolution
      if (palette == null)
        bos.write4Bytes(0); // Colors
      else
        bos.write4Bytes(palette.length()); // Colors
      bos.write4Bytes(0); // Important Colors
      // bos.write_4_bytes(0); // Compression
    }

    { // write Palette
      writer.writePalette(bos);
    }
    { // write Image Data
      bos.writeByteArray(imagedata);
    }
  }
View Full Code Here

Examples of org.apache.sanselan.common.BinaryOutputStream

    //    bos.write(exifBytes, TIFF_HEADER_SIZE, exifBytes.length
    //    - TIFF_HEADER_SIZE);

    {
      BufferOutputStream tos = new BufferOutputStream(output, 0);
      BinaryOutputStream bos = new BinaryOutputStream(tos, byteOrder);
      writeImageFileHeader(bos, rootDirectory.getOffset());
    }

    // zero out the parsed pieces of old exif segment, in case we don't overwrite them.
    for (int i = 0; i < analysis.size(); i++)
    {
      TiffElement element = (TiffElement) analysis.get(i);
      for (int j = 0; j < element.length; j++)
      {
        int index = element.offset + j;
        if (index < output.length)
          output[index] = 0;
      }
    }

    // write in the new items
    for (int i = 0; i < outputItems.size(); i++)
    {
      TiffOutputItem outputItem = (TiffOutputItem) outputItems.get(i);

      BufferOutputStream tos = new BufferOutputStream(output, outputItem
          .getOffset());
      BinaryOutputStream bos = new BinaryOutputStream(tos, byteOrder);
      outputItem.writeItem(bos);
    }

    os.write(output);
  }
View Full Code Here

Examples of org.math.io.stream.BinaryOutputStream

            throw new IllegalArgumentException(ex.toString());
        }

        BufferedOutputStream bos = new BufferedOutputStream(fos);

        BinaryOutputStream bs = new BinaryOutputStream(bos, bigEndian);

        bs.writeIntArray(array, append);
    }
View Full Code Here

Examples of org.math.io.stream.BinaryOutputStream

            throw new IllegalArgumentException(ex.toString());
        }

        BufferedOutputStream bos = new BufferedOutputStream(fos);

        BinaryOutputStream bs = new BinaryOutputStream(bos, bigEndian);

        bs.writeFloatArray(array, append);
    }
View Full Code Here

Examples of org.math.io.stream.BinaryOutputStream

            throw new IllegalArgumentException(ex.toString());
        }

        BufferedOutputStream bos = new BufferedOutputStream(fos);

        BinaryOutputStream bs = new BinaryOutputStream(bos, bigEndian);

        bs.writeDoubleArray(array, append);
    }
View Full Code Here

Examples of org.math.io.stream.BinaryOutputStream

            throw new IllegalArgumentException(ex.toString());
        }

        BufferedOutputStream bos = new BufferedOutputStream(fos);

        BinaryOutputStream bs = new BinaryOutputStream(bos, bigEndian);

        bs.writeByteArray(bytes, append);
    }
View Full Code Here

Examples of scalaSci.math.io.stream.BinaryOutputStream

            fos = new FileOutputStream(file, append);
        } catch (FileNotFoundException ex) {
            throw new IllegalArgumentException(ex.toString());
        }
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        BinaryOutputStream bs = new BinaryOutputStream(bos, bigEndian);
        bs.writeIntArray(array, append);
    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. 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.