You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

JpegDecompressor.java 1.6KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /* Copyright (C) 2016 Brian P. Hinz
  2. *
  3. * This is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation; either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This software is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this software; if not, write to the Free Software
  15. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  16. * USA.
  17. */
  18. package com.tigervnc.rfb;
  19. import java.awt.*;
  20. import java.awt.image.*;
  21. import java.io.*;
  22. import java.nio.ByteBuffer;
  23. import javax.imageio.*;
  24. import javax.imageio.stream.*;
  25. public class JpegDecompressor {
  26. public JpegDecompressor() {}
  27. public void decompress(ByteBuffer jpegBuf, int jpegBufLen,
  28. PixelBuffer pb, Rect r, PixelFormat pf)
  29. {
  30. byte[] src = new byte[jpegBufLen];
  31. jpegBuf.get(src);
  32. try {
  33. ImageIO.setUseCache(false);
  34. BufferedImage jpeg =
  35. ImageIO.read(new MemoryCacheImageInputStream(new ByteArrayInputStream(src)));
  36. jpeg.setAccelerationPriority(1);
  37. synchronized(pb.getImage()) {
  38. Graphics2D g2 = (Graphics2D)pb.getImage().getGraphics();
  39. g2.drawImage(jpeg, r.tl.x, r.tl.y, r.width(), r.height(), null);
  40. g2.dispose();
  41. }
  42. jpeg.flush();
  43. } catch (IOException e) {
  44. throw new Exception(e.getMessage());
  45. }
  46. }
  47. }