< prev index next >

modules/graphics/src/main/java/com/sun/javafx/iio/gif/GIFImageLoader2.java

Print this page
rev 8890 : RT-40778

*** 28,39 **** import com.sun.javafx.iio.ImageFrame; import com.sun.javafx.iio.ImageMetadata; import com.sun.javafx.iio.ImageStorage; import com.sun.javafx.iio.common.ImageLoaderImpl; import com.sun.javafx.iio.common.ImageTools; - import com.sun.javafx.iio.common.PushbroomScaler; - import com.sun.javafx.iio.common.ScalerFactory; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.util.Arrays; --- 28,37 ----
*** 221,247 **** boolean localPalette = (imgCtrl & 0x80) != 0; boolean isInterlaced = (imgCtrl & 0x40) != 0; byte palette[][] = localPalette ? readPalete(2 << (imgCtrl & 7), trnsIndex) : globalPalette; ! ImageMetadata metadata = updateMetadata(screenW, screenH, imageControlCode & 0xFFFF); int disposalCode = (imageControlCode >>> 26) & 7; byte pImage[] = new byte[w * h]; decodeImage(pImage, w, h, isInterlaced ? computeInterlaceReIndex(h) : null); ! ImageFrame imgGIF = decodePalette(pImage, palette, trnsIndex, ! left, top, w, h, disposalCode, metadata); ! // need to remove scaler from image decoder itself ! int[] outWH = ImageTools.computeDimensions(screenW, screenH, width, height, preserveAspectRatio); ! ! if (screenW != outWH[0] || screenH != outWH[1]) { ! imgGIF = scaleImage(imgGIF, outWH[0], outWH[1], smooth); } ! return imgGIF; } // IO helpers private int readByte() throws IOException { int ch = stream.read(); --- 219,248 ---- boolean localPalette = (imgCtrl & 0x80) != 0; boolean isInterlaced = (imgCtrl & 0x40) != 0; byte palette[][] = localPalette ? readPalete(2 << (imgCtrl & 7), trnsIndex) : globalPalette; ! int[] outWH = ImageTools.computeDimensions(screenW, screenH, width, height, preserveAspectRatio); ! width = outWH[0]; ! height = outWH[1]; ! ! ImageMetadata metadata = updateMetadata(width, height, imageControlCode & 0xFFFF); int disposalCode = (imageControlCode >>> 26) & 7; byte pImage[] = new byte[w * h]; decodeImage(pImage, w, h, isInterlaced ? computeInterlaceReIndex(h) : null); ! ByteBuffer img = decodePalette(pImage, palette, trnsIndex, ! left, top, w, h, disposalCode); ! if (screenW != width || screenH != height) { ! img = ImageTools.scaleImage(img, screenW, screenH, 4, ! width, height, smooth); } ! return new ImageFrame(ImageStorage.ImageType.RGBA, img, ! width, height, width * 4, null, metadata); } // IO helpers private int readByte() throws IOException { int ch = stream.read();
*** 288,299 **** } } } // decode palletized image into RGBA ! private ImageFrame decodePalette(byte[] srcImage, byte[][] palette, int trnsIndex, ! int left, int top, int w, int h, int disposalCode, ImageMetadata metadata) { byte img[] = (disposalCode == 3) ? image.clone() : image; for (int y = 0; y != h; ++y) { int iPos = ((top + y) * screenW + left) * 4; --- 289,300 ---- } } } // decode palletized image into RGBA ! private ByteBuffer decodePalette(byte[] srcImage, byte[][] palette, int trnsIndex, ! int left, int top, int w, int h, int disposalCode) { byte img[] = (disposalCode == 3) ? image.clone() : image; for (int y = 0; y != h; ++y) { int iPos = ((top + y) * screenW + left) * 4;
*** 320,348 **** } if (disposalCode != 3) img = img.clone(); if (disposalCode == 2) restoreToBackground(image, left, top, w, h); ! return new ImageFrame(ImageStorage.ImageType.RGBA, ByteBuffer.wrap(img), ! screenW, screenH, screenW * 4, null, metadata); ! } ! ! // copy from PNG, needs exctract refactoring later ! // scales the image ! private ImageFrame scaleImage(ImageFrame imgPNG, int rWidth, int rHeight, boolean smooth) { ! byte image[] = ((ByteBuffer) imgPNG.getImageData()).array(); ! int bpp = ImageStorage.getNumBands(imgPNG.getImageType()); ! ! PushbroomScaler scaler = ScalerFactory.createScaler(screenW, screenH, bpp, ! rWidth, rHeight, smooth); ! ! for (int y = 0; y != screenH; ++y) { ! scaler.putSourceScanline(image, y * screenW * bpp); ! } ! ! return new ImageFrame(imgPNG.getImageType(), scaler.getDestination(), ! rWidth, rHeight, rWidth * bpp, null, imgPNG.getMetadata()); } // fill metadata private ImageMetadata updateMetadata(int w, int h, int delayTime) { ImageMetadata metaData = new ImageMetadata(null, true, null, null, null, --- 321,331 ---- } if (disposalCode != 3) img = img.clone(); if (disposalCode == 2) restoreToBackground(image, left, top, w, h); ! return ByteBuffer.wrap(img); } // fill metadata private ImageMetadata updateMetadata(int w, int h, int delayTime) { ImageMetadata metaData = new ImageMetadata(null, true, null, null, null,
< prev index next >