| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Copyright 2007 Google Inc. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License"); You may not
- // use this file except in compliance with the License. You may obtain a copy of
- // the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
- // applicable law or agreed to in writing, software distributed under the
- // License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- // OF ANY KIND, either express or implied. See the License for the specific
- // language governing permissions and limitations under the License.
- package com.google.scrollview.ui;
- import org.piccolo2d.nodes.PImage;
- import java.io.BufferedReader;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import javax.xml.bind.DatatypeConverter;
- /**
- * The ScrollViewImageHandler is a helper class which takes care of image
- * processing. It is used to construct an Image from the message-stream and
- * basically consists of a number of utility functions to process the input
- * stream.
- *
- * @author wanke@google.com
- */
- public class SVImageHandler {
- /* All methods are static, so we forbid to construct SVImageHandler objects. */
- private SVImageHandler() {
- }
- /**
- * Reads size bytes from the stream in and interprets it as an image file,
- * encoded as png, and then text-encoded as base 64, returning the decoded
- * bitmap.
- *
- * @param size The size of the image file.
- * @param in The input stream from which to read the bytes.
- */
- public static PImage readImage(int size, BufferedReader in) {
- char[] charbuffer = new char[size];
- int numRead = 0;
- while (numRead < size) {
- int newRead = -1;
- try {
- newRead = in.read(charbuffer, numRead, size - numRead);
- } catch (IOException e) {
- System.out.println("Failed to read image data from socket:" + e.getMessage());
- return null;
- }
- if (newRead < 0) {
- return null;
- }
- numRead += newRead;
- }
- if (numRead != size) {
- System.out.println("Failed to read image data from socket");
- return null;
- }
- // Convert the character data to binary.
- byte[] binarydata = DatatypeConverter.parseBase64Binary(new String(charbuffer));
- // Convert the binary data to a byte stream and parse to image.
- ByteArrayInputStream byteStream = new ByteArrayInputStream(binarydata);
- try {
- PImage img = new PImage(ImageIO.read(byteStream));
- return img;
- } catch (IOException e) {
- System.out.println("Failed to decode image data from socket" + e.getMessage());
- }
- return null;
- }
- }
|