Exemple #1
0
        /// <summary>
        /// Creates an image containing pixels read from the screen.  This image does
        /// not include the mouse cursor. </summary>
        /// <param name="screenRect">      Rect to capture in screen coordinates </param>
        /// <returns>  The captured image </returns>
        /// <exception cref="IllegalArgumentException"> if <code>screenRect</code> width and height are not greater than zero </exception>
        /// <exception cref="SecurityException"> if <code>readDisplayPixels</code> permission is not granted </exception>
        /// <seealso cref=     SecurityManager#checkPermission </seealso>
        /// <seealso cref=     AWTPermission </seealso>
        public virtual BufferedImage CreateScreenCapture(Rectangle screenRect)
        {
            lock (this)
            {
                CheckScreenCaptureAllowed();

                CheckValidRect(screenRect);

                BufferedImage  image;
                DataBufferInt  buffer;
                WritableRaster raster;

                if (ScreenCapCM == null)
                {
                    /*
                     * Fix for 4285201
                     * Create a DirectColorModel equivalent to the default RGB ColorModel,
                     * except with no Alpha component.
                     */

                    ScreenCapCM = new DirectColorModel(24, 0x00FF0000, 0x0000FF00, 0x000000FF);
                    /* red mask */
                    /* green mask */
                    /* blue mask */
                }

                // need to sync the toolkit prior to grabbing the pixels since in some
                // cases rendering to the screen may be delayed
                Toolkit.DefaultToolkit.Sync();

                int[] pixels;
                int[] bandmasks = new int[3];

                pixels = Peer.GetRGBPixels(screenRect);
                buffer = new DataBufferInt(pixels, pixels.Length);

                bandmasks[0] = ScreenCapCM.RedMask;
                bandmasks[1] = ScreenCapCM.GreenMask;
                bandmasks[2] = ScreenCapCM.BlueMask;

                raster = Raster.CreatePackedRaster(buffer, screenRect.Width_Renamed, screenRect.Height_Renamed, screenRect.Width_Renamed, bandmasks, null);
                SunWritableRaster.makeTrackable(buffer);

                image = new BufferedImage(ScreenCapCM, raster, false, null);

                return(image);
            }
        }
        /// <summary>
        /// Return a Raster containing the colors generated for the graphics
        /// operation. </summary>
        /// <param name="x">,y,w,h The area in device space for which colors are
        /// generated. </param>
        public virtual Raster GetRaster(int x, int y, int w, int h)
        {
            if (OutRas == null || OutRas.Width < w || OutRas.Height < h)
            {
                // If h==1, we will probably get lots of "scanline" rects
                OutRas = MakeRaster((h == 1 ? System.Math.Max(w, MaxWidth) : w), h);
            }
            double X = Mod(XOrg + x * IncXAcross + y * IncXDown, BWidth);
            double Y = Mod(YOrg + x * IncYAcross + y * IncYDown, BHeight);

            SetRaster((int)X, (int)Y, FractAsInt(X), FractAsInt(Y), w, h, BWidth, BHeight, Colincx, Colincxerr, Colincy, Colincyerr, Rowincx, Rowincxerr, Rowincy, Rowincyerr);

            SunWritableRaster.markDirty(OutRas);

            return(OutRas);
        }
        /// <summary>
        /// Updates the splash window with current contents of the overlay image.
        /// </summary>
        /// <exception cref="IllegalStateException"> if the overlay image does not exist;
        ///         for example, if {@code createGraphics} has never been called,
        ///         or if the splash screen has already been closed </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void update() throws IllegalStateException
        public void Update()
        {
            BufferedImage image;

            lock (typeof(SplashScreen))
            {
                CheckVisible();
                image = this.Image;
            }
            if (image == null)
            {
                throw new IllegalStateException("no overlay image available");
            }
            DataBuffer buf = image.Raster.DataBuffer;

            if (!(buf is DataBufferInt))
            {
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
                throw new AssertionError("Overlay image DataBuffer is of invalid type == " + buf.GetType().FullName);
            }
            int numBanks = buf.NumBanks;

            if (numBanks != 1)
            {
                throw new AssertionError("Invalid number of banks ==" + numBanks + " in overlay image DataBuffer");
            }
            if (!(image.SampleModel is SinglePixelPackedSampleModel))
            {
//JAVA TO C# CONVERTER WARNING: The .NET Type.FullName property will not always yield results identical to the Java Class.getName method:
                throw new AssertionError("Overlay image has invalid sample model == " + image.SampleModel.GetType().FullName);
            }
            SinglePixelPackedSampleModel sm = (SinglePixelPackedSampleModel)image.SampleModel;
            int       scanlineStride        = sm.ScanlineStride;
            Rectangle rect = image.Raster.Bounds;

            // Note that we steal the data array here, but just for reading
            // so we do not need to mark the DataBuffer dirty...
            int[] data = SunWritableRaster.stealData((DataBufferInt)buf, 0);
            lock (typeof(SplashScreen))
            {
                CheckVisible();
                _update(SplashPtr, data, rect.x, rect.y, rect.Width_Renamed, rect.Height_Renamed, scanlineStride);
            }
        }