Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'openjdk/sun/awt/image/ImageRepresentation.java')
-rw-r--r--openjdk/sun/awt/image/ImageRepresentation.java421
1 files changed, 0 insertions, 421 deletions
diff --git a/openjdk/sun/awt/image/ImageRepresentation.java b/openjdk/sun/awt/image/ImageRepresentation.java
deleted file mode 100644
index 962d46e0..00000000
--- a/openjdk/sun/awt/image/ImageRepresentation.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- Copyright (C) 2009 Jeroen Frijters
- Copyright (C) 2010 Volker Berlin (i-net software)
- Copyright (C) 2011 Karsten Heinrich (i-net software)
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jeroen Frijters
- jeroen@frijters.net
-
-*/
-
-package sun.awt.image;
-
-import java.awt.image.BufferedImage;
-import java.awt.image.ColorModel;
-import java.awt.image.ImageConsumer;
-import java.awt.image.ImageObserver;
-import java.util.Hashtable;
-
-import cli.System.Drawing.Bitmap;
-import cli.System.Drawing.Imaging.BitmapData;
-import cli.System.Drawing.Imaging.ImageLockMode;
-import cli.System.Drawing.Imaging.PixelFormat;
-
-public class ImageRepresentation extends ImageWatched implements ImageConsumer{
-
- private static final int DEFAULT_PIXEL_FORMAT = PixelFormat.Format32bppArgb;
- InputStreamImageSource src;
- ToolkitImage image;
-
- private int width = -1;
- private int height = -1;
-
- private int availinfo;
-
- private BufferedImage bimage;
- private cli.System.Drawing.Bitmap bitmap;
- private int pixelFormat = DEFAULT_PIXEL_FORMAT;
-
- ImageRepresentation(ToolkitImage im){
- image = im;
-
- if (image.getSource() instanceof InputStreamImageSource) {
- src = (InputStreamImageSource) image.getSource();
- }
- }
-
- /* REMIND: Only used for Frame.setIcon - should use ImageWatcher instead */
- public synchronized void reconstruct(int flags) {
- if (src != null) {
- src.checkSecurity(null, false);
- }
- int missinginfo = flags & ~availinfo;
- if ((availinfo & ImageObserver.ERROR) == 0 && missinginfo != 0) {
- numWaiters++;
- try {
- startProduction();
- missinginfo = flags & ~availinfo;
- while ((availinfo & ImageObserver.ERROR) == 0 &&
- missinginfo != 0)
- {
- try {
- wait();
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- return;
- }
- missinginfo = flags & ~availinfo;
- }
- } finally {
- decrementWaiters();
- }
- }
- }
-
- @Override
- public void setDimensions(int w, int h){
- if (src != null) {
- src.checkSecurity(null, false);
- }
-
- image.setDimensions(w, h);
-// bitmap = new cli.System.Drawing.Bitmap(w, h);
-
- newInfo(image, (ImageObserver.WIDTH | ImageObserver.HEIGHT),
- 0, 0, w, h);
-
- if (w <= 0 || h <= 0) {
- imageComplete(ImageConsumer.IMAGEERROR);
- return;
- }
-
- width = w;
- height = h;
-
- availinfo |= ImageObserver.WIDTH | ImageObserver.HEIGHT;
- }
-
- private Bitmap getBitmapRef(){
- if( bitmap == null ){
- bitmap = new Bitmap(width, height, PixelFormat.wrap(pixelFormat) );
- }
- return bitmap;
- }
-
- public int getWidth(){
- return width;
- }
-
- public int getHeight(){
- return height;
- }
-
- public BufferedImage getBufferedImage(){
- return bimage;
- }
-
- @Override
- public void setProperties(Hashtable<?, ?> props){
- // ignore it
-
- }
-
- @Override
- public synchronized void setColorModel(ColorModel model){
- int newPixelFormat = getPixelFormatForColorModel(model);
- if( model.getPixelSize() <= 8 ){
- newPixelFormat = DEFAULT_PIXEL_FORMAT;
- }
- if( newPixelFormat != pixelFormat && bitmap != null ){
- // force reconstruct of the bitmap due to a color model change
- bitmap.Dispose();
- bitmap = null;
- }
- pixelFormat = newPixelFormat;
- }
-
- @Override
- public void setHints(int hintflags){
- // ignore it
- }
-
- @Override
- public void setPixels(int x, int y, int w, int h, ColorModel model, byte[] pixels, int off, int scansize){
- int[] pixeli = new int[pixels.length];
- for (int i = 0; i < pixels.length; i++)
- {
- pixeli[i] = model.getRGB(pixels[i] & 0xff);
- }
- setPixels(x, y, w, h, model, pixeli, off, scansize);
- }
-
- @Override
- @cli.System.Security.SecuritySafeCriticalAttribute.Annotation
- public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize){
- // FIXME this method will fail for scan lines
- if( x < 0) {
- w -= x;
- x = 0;
- }
- if (y < 0) {
- h -= y;
- y = 0;
- }
- if (w <= 0 || h <= 0) {
- // nothing to set
- return;
- }
- if ( off < 0 ) {
- throw new java.lang.ArrayIndexOutOfBoundsException( "Data offset out of bounds." );
- }
- long length = w * h;
- if (length > pixels.length - off)
- {
- throw new java.lang.ArrayIndexOutOfBoundsException("Data offset out of bounds.");
- }
- synchronized (this)
- {
- int pixelFormat = getPixelFormatForColorModel( model );
- int bpp = model.getPixelSize();
- if( bpp == 32 ){ // 32 can be copies 1:1 using an int array
- copyInt(x, y, w, h, pixels, off, pixelFormat);
- }else if( bpp <= 8 ){
- // transform all pixels using the color model (for indexed color models)
- int[] newData = new int[pixels.length];
- for( int i=0; i < newData.length; i++ ){
- newData[i] = model.getRGB(pixels[i]);
- }
- copyInt(x, y, w, h, pixels, off, DEFAULT_PIXEL_FORMAT);
- }else {
- // byte per scanline, must be a multitude of 4
- // see http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4
- int bytesPerLine = (bpp * w) / 8;
- int scanLine = ((bytesPerLine + 3) / 4) * 4;
- int offset = scanLine - bytesPerLine;
- byte[] newData = new byte[h * scanLine];
- int position = 0;
- int pixel;
- for( int i=0; i<pixels.length; i++ ){
- pixel = pixels[i];
- switch( bpp ){
- case 16: newData[position] = (byte)(pixel & 0xFF);
- newData[position + 1] = (byte)((pixel >> 8) & 0xFF); break;
- case 24: newData[position] = (byte)(pixel & 0xFF);
- newData[position + 1] = (byte)((pixel >> 8) & 0xFF);
- newData[position + 2] = (byte)((pixel >> 16) & 0xFF); break;
- }
- position += bpp / 8;
- if( position % scanLine == bytesPerLine ){
- position += offset;
- }
- }
- copyByte(x, y, w, h, newData, off, pixelFormat, bpp);
- }
- }
-
- availinfo |= ImageObserver.SOMEBITS;
-
- // Can't do this here since we might need to transform/clip
- // the region
- if (((availinfo & ImageObserver.FRAMEBITS) == 0)) {
- newInfo(image, ImageObserver.SOMEBITS, x, y, w, h);
- }
- }
-
- @cli.System.Security.SecurityCriticalAttribute.Annotation
- private void copyInt(int x, int y, int w, int h, int[] pixels, int off, int pixelFormat ) {
- BitmapData data = getBitmapRef().LockBits(new cli.System.Drawing.Rectangle(x, y, w, h), ImageLockMode.wrap(ImageLockMode.WriteOnly), PixelFormat.wrap(pixelFormat));
- cli.System.Runtime.InteropServices.Marshal.Copy(pixels, off, data.get_Scan0(), data.get_Width() * data.get_Height());
- getBitmapRef().UnlockBits(data);
- }
-
- @cli.System.Security.SecurityCriticalAttribute.Annotation
- private void copyByte(int x, int y, int w, int h, byte[] pixels, int off, int pixelFormat, int bpp) {
- BitmapData data = getBitmapRef().LockBits(new cli.System.Drawing.Rectangle(x, y, w, h), ImageLockMode.wrap(ImageLockMode.WriteOnly), PixelFormat.wrap(pixelFormat));
- cli.System.Runtime.InteropServices.Marshal.Copy(pixels, off, data.get_Scan0(), pixels.length);
- getBitmapRef().UnlockBits(data);
- }
-
-
- private int getPixelFormatForColorModel( ColorModel cm ){
- if( cm == null ){
- return DEFAULT_PIXEL_FORMAT; // TODO is PixelFormat.Canonical better here?
- }
- int bpp = cm.getPixelSize();
- int[] sizes = cm.getComponentSize();
- switch( bpp ){
- case 1: return PixelFormat.Undefined; // Indexed is invalid and there is no 1bpp
- case 4: return PixelFormat.Format4bppIndexed;
- case 8: return PixelFormat.Format8bppIndexed;
- case 16:
- if( sizes.length <= 1) {
- return PixelFormat.Format16bppGrayScale;
- }
- if( sizes.length == 3 ){
- if( sizes[0] == 5 && sizes[2] == 5 ){
- return sizes[1] == 5 ? PixelFormat.Format16bppRgb555 : PixelFormat.Format16bppRgb565;
- }
- }
- if( sizes.length == 4 && cm.hasAlpha() ){
- return PixelFormat.Format16bppArgb1555;
- }
- break;
- case 24:
- return PixelFormat.Format24bppRgb;
- case 32:
- if(!cm.hasAlpha()){
- return PixelFormat.Format32bppRgb;
- } else {
- return cm.isAlphaPremultiplied() ? PixelFormat.Format32bppPArgb : PixelFormat.Format32bppArgb;
- }
- case 48:
- return PixelFormat.Format48bppRgb;
- case 64:
- return cm.isAlphaPremultiplied() ? PixelFormat.Format64bppPArgb : PixelFormat.Format64bppArgb;
- }
- return PixelFormat.Undefined;
- }
-
- private boolean consuming = false;
-
- public void imageComplete(int status) {
- if (src != null) {
- src.checkSecurity(null, false);
- }
- boolean done;
- int info;
- switch (status) {
- default:
- case ImageConsumer.IMAGEABORTED:
- done = true;
- info = ImageObserver.ABORT;
- break;
- case ImageConsumer.IMAGEERROR:
- image.addInfo(ImageObserver.ERROR);
- done = true;
- info = ImageObserver.ERROR;
- dispose();
- break;
- case ImageConsumer.STATICIMAGEDONE:
- done = true;
- info = ImageObserver.ALLBITS;
- break;
- case ImageConsumer.SINGLEFRAMEDONE:
- done = false;
- info = ImageObserver.FRAMEBITS;
- break;
- }
- synchronized (this) {
- if (done) {
- image.getSource().removeConsumer(this);
- consuming = false;
- }
- if (bimage == null ) {
- bimage = new BufferedImage(getBitmapRef());
- }
- availinfo |= info;
- notifyAll();
- }
-
- newInfo(image, info, 0, 0, width, height);
-
- image.infoDone(status);
- }
-
- /*synchronized*/ void startProduction() {
- if (!consuming) {
- consuming = true;
- image.getSource().startProduction(this);
- }
- }
-
- private int numWaiters;
-
- private synchronized void checkConsumption() {
- if (isWatcherListEmpty() && numWaiters == 0 &&
- ((availinfo & ImageObserver.ALLBITS) == 0))
- {
- dispose();
- }
- }
-
- @Override
- public synchronized void notifyWatcherListEmpty() {
- checkConsumption();
- }
-
- private synchronized void decrementWaiters() {
- --numWaiters;
- checkConsumption();
- }
-
- public boolean prepare(ImageObserver iw) {
- if (src != null) {
- src.checkSecurity(null, false);
- }
- if ((availinfo & ImageObserver.ERROR) != 0) {
- if (iw != null) {
- iw.imageUpdate(image, ImageObserver.ERROR|ImageObserver.ABORT,
- -1, -1, -1, -1);
- }
- return false;
- }
- boolean done = ((availinfo & ImageObserver.ALLBITS) != 0);
- if (!done) {
- addWatcher(iw);
- startProduction();
- // Some producers deliver image data synchronously
- done = ((availinfo & ImageObserver.ALLBITS) != 0);
- }
- return done;
- }
-
- public int check(ImageObserver iw) {
-
- if (src != null) {
- src.checkSecurity(null, false);
- }
- if ((availinfo & (ImageObserver.ERROR | ImageObserver.ALLBITS)) == 0) {
- addWatcher(iw);
- }
-
- return availinfo;
- }
-
- synchronized void abort() {
- image.getSource().removeConsumer(this);
- consuming = false;
- bimage = null;
- bitmap = null;
-
- newInfo(image, ImageObserver.ABORT, -1, -1, -1, -1);
- availinfo &= ~(ImageObserver.SOMEBITS
- | ImageObserver.FRAMEBITS
- | ImageObserver.ALLBITS
- | ImageObserver.ERROR);
- }
-
- synchronized void dispose() {
- image.getSource().removeConsumer(this);
- consuming = false;
- availinfo &= ~(ImageObserver.SOMEBITS
- | ImageObserver.FRAMEBITS
- | ImageObserver.ALLBITS);
- }
-}