📄 qtimage.java
字号:
this.height = height; props = (properties != null) ? properties : new Hashtable(); if (width <= 0 || height <= 0 || pixels == null) { errorLoading = true; return; } isLoaded = true; deliver(); createImage(); setPixels(pixels); } // java.awt.Image methods //////////////////////////////////////////////// public int getWidth (ImageObserver observer) { if (addObserver(observer)) return -1; return width; } public int getHeight (ImageObserver observer) { if (addObserver(observer)) return -1; return height; } public Object getProperty (String name, ImageObserver observer) { if (addObserver(observer)) return UndefinedProperty; Object value = props.get (name); return (value == null) ? UndefinedProperty : value; } /** * Returns the source of this image. */ public ImageProducer getSource () { if (!isLoaded) return null; return new MemoryImageSource(width, height, nativeModel, getPixels(), 0, width); } void putPainter(QtImageGraphics g) { if( painters == null ) painters = new WeakHashMap(); painters.put( g, "dummy" ); } void removePainter(QtImageGraphics g) { painters.remove( g ); if( killFlag && painters.isEmpty() ) freeImage(); } /** * Creates a Graphics context for this image. */ public Graphics getGraphics () { if (!isLoaded || killFlag) return null; return new QtImageGraphics(this); } /** * Creates a Graphics context for this image. */ Graphics getDirectGraphics(QtComponentPeer peer) { if (!isLoaded) return null; return new QtImageDirectGraphics(this, peer); } /** * Returns a scaled instance of this image. */ public Image getScaledInstance(int width, int height, int hints) { if (width <= 0 || height <= 0) throw new IllegalArgumentException("Width and height of scaled bitmap"+ "must be >= 0"); return new QtImage(this, width, height, hints); } /** * If the image is loaded and comes from an ImageProducer, * regenerate the image from there. * * I have no idea if this is ever actually used. Since QtImage can't be * instantiated directly, how is the user to know if it was created from * an ImageProducer or not? */ public synchronized void flush () { if (isLoaded && source != null) { observers = new Vector(); isLoaded = false; freeImage(); source.startProduction(new QtImageConsumer(this, source)); } } public void finalize() { dispose(); } public void dispose() { if (isLoaded) { if( painters == null || painters.isEmpty() ) freeImage(); else killFlag = true; // can't destroy image yet. // Do so when all painters are gone. } } /** * Returns the image status, used by QtToolkit */ public int checkImage (ImageObserver observer) { if (addObserver(observer)) { if (errorLoading == true) return ImageObserver.ERROR; else return 0; } return ImageObserver.ALLBITS | ImageObserver.WIDTH | ImageObserver.HEIGHT; } // Drawing methods //////////////////////////////////////////////// /** * Draws an image with eventual scaling/transforming. */ public boolean drawImage (QtGraphics g, QMatrix matrix, ImageObserver observer) { if (addObserver(observer)) return false; drawPixelsTransformed (g, matrix); return true; } /** * Draws an image to the QtGraphics context, at (x,y) with optional * compositing with a background color. */ public boolean drawImage (QtGraphics g, int x, int y, Color bgcolor, ImageObserver observer) { if (addObserver(observer)) return false; if(bgcolor != null) drawPixels(g, bgcolor.getRed (), bgcolor.getGreen (), bgcolor.getBlue (), x, y, true); else drawPixels(g, 0, 0, 0, x, y, false); return true; } /** * Draws an image to the QtGraphics context, at (x,y) scaled to * width and height, with optional compositing with a background color. */ public boolean drawImage (QtGraphics g, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) { if (addObserver(observer)) return false; if(bgcolor != null) drawPixelsScaled(g, bgcolor.getRed (), bgcolor.getGreen (), bgcolor.getBlue (), x, y, width, height, true); else drawPixelsScaled(g, 0, 0, 0, x, y, width, height, false); return true; } /** * Draws an image with eventual scaling/transforming. */ public boolean drawImage (QtGraphics g, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer) { if (addObserver(observer)) return false; boolean flipX = (dx1 > dx2)^(sx1 > sx2); boolean flipY = (dy1 > dy2)^(sy1 > sy2); int dstWidth = Math.abs (dx2 - dx1); int dstHeight = Math.abs (dy2 - dy1); int srcWidth = Math.abs (sx2 - sx1); int srcHeight = Math.abs (sy2 - sy1); int srcX = (sx1 < sx2) ? sx1 : sx2; int srcY = (sy1 < sy2) ? sy1 : sy2; int dstX = (dx1 < dx2) ? dx1 : dx2; int dstY = (dy1 < dy2) ? dy1 : dy2; // Clipping. This requires the dst to be scaled as well, if (srcWidth > width) { dstWidth = (int)((double)dstWidth*((double)width/(double)srcWidth)); srcWidth = width - srcX; } if (srcHeight > height) { dstHeight = (int)((double)dstHeight*((double)height/(double)srcHeight)); srcHeight = height - srcY; } if (srcWidth + srcX > width) { dstWidth = (int)((double)dstWidth * (double)(width - srcX)/(double)srcWidth); srcWidth = width - srcX; } if (srcHeight + srcY > height) { dstHeight = (int)((double)dstHeight * (double)(width - srcY)/(double)srcHeight); srcHeight = height - srcY; } if ( srcWidth <= 0 || srcHeight <= 0 || dstWidth <= 0 || dstHeight <= 0) return true; if(bgcolor != null) drawPixelsScaledFlipped (g, bgcolor.getRed (), bgcolor.getGreen (), bgcolor.getBlue (), flipX, flipY, srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight, true); else drawPixelsScaledFlipped (g, 0, 0, 0, flipX, flipY, srcX, srcY, srcWidth, srcHeight, dstX, dstY, dstWidth, dstHeight, false); return true; } public native void copyArea(int x, int y, int width, int height, int dx, int dy); // Private methods //////////////////////////////////////////////// /** * Delivers notifications to all queued observers. */ private void deliver() { int flags = ImageObserver.HEIGHT | ImageObserver.WIDTH | ImageObserver.PROPERTIES | ImageObserver.ALLBITS; if (observers != null) for(int i=0; i < observers.size(); i++) ((ImageObserver)observers.elementAt(i)). imageUpdate(this, flags, 0, 0, width, height); observers = null; } /** * Adds an observer, if we need to. * @return true if an observer was added. */ private boolean addObserver(ImageObserver observer) { if (!isLoaded) { if(observer != null) if (!observers.contains (observer)) observers.addElement (observer); return true; } return false; } public String toString() { return "QtImage [isLoaded="+isLoaded+", width="+width+", height="+height +"]"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -