Example #1
0
        public RPFImage[] deproject(int frameNumber, BufferedImage frame)
        {
            // Effectively a no-op for non-polar frames.
            RPFImage[] image  = new RPFImage[1];
            Sector     sector = computeFrameCoverage(frameNumber);

            image[0] = new RPFImage(sector, frame);
            return(image);
        }
Example #2
0
        public RPFImage[] deproject(int frameNumber, BufferedImage frame)
        {
            if (frame == null)
            {
                String message = Logging.getMessage("nullValue.ImageSource");
                Logging.logger().severe(message);
                throw new ArgumentException(message);
            }

            PixelTransformer pt = (this.zoneCode == '9') ? northernPixels : southernPixels;

            RPFImage[] images;
            if (isDatelineSpanningFrame(frameNumber, pt))
            {
                if (pt == northernPixels)
                {
                    images = deprojectNorthernDatelineFrames(frameNumber, frame, pt);
                }
                else
                {
                    images = deprojectSouthernDatelineFrames(frameNumber, frame, pt);
                }
            }
            else
            {
                // non-dateline spanning frames are more straightforward...
                Sector        sector    = computeFrameCoverage(frameNumber);
                BufferedImage destImage = new BufferedImage(frame.getWidth(), frame.getHeight(),
                                                            BufferedImage.TYPE_4BYTE_ABGR);
                resampleFrameFile(sector, frame, destImage, frameNumber, pt);
                images    = new RPFImage[1];
                images[0] = new RPFImage(sector, destImage);
            }

            return(images);
        }
Example #3
0
        private RPFImage[] deprojectSouthernDatelineFrames(int frameNumber, BufferedImage frame, PixelTransformer pt)
        {
            // We have to split this frame at the dateline.
            RPFImage[] images = new RPFImage[2];

            // Compute a tight bounds for western half...
            int minX = pixelColumn(0, frameNumber, this.frameStructure.getPixelRowsPerFrame(),
                                   this.frameStructure.getPolarFrames());
            int maxX = pixelColumn(this.frameStructure.getPixelRowsPerFrame(), frameNumber,
                                   this.frameStructure.getPixelRowsPerFrame(), this.frameStructure.getPolarFrames());
            int minY = pixelRow(0, frameNumber, this.frameStructure.getPixelRowsPerFrame(),
                                this.frameStructure.getPolarFrames());
            int maxY = pixelRow(this.frameStructure.getPixelRowsPerFrame(), frameNumber,
                                this.frameStructure.getPixelRowsPerFrame(), this.frameStructure.getPolarFrames());
            int midX = (minX + maxX) / 2;
            int midY = (minY + maxY) / 2;

            // Below we are using knowledge about the frames that make up the lower 1/2 part of the middle
            // column, and which borders and edges constitute the extrema...

            MinMaxLatLon bndsWest = new MinMaxLatLon();

            bndsWest.minLon = -180.;
            // center-most frame is different...
            if (isCenterFrame(frameNumber))
            {
                bndsWest.maxLon = 0.;
                // here max lat is at center of frame
                bndsWest.maxLat = pt.pixel2Latitude(midX, midY, this.frameStructure.getPolarPixelConstant());
                // min lat is at an arbitrary corner...
                bndsWest.minLat = pt.pixel2Latitude(minX, minY, this.frameStructure.getPolarPixelConstant());
            }
            else
            {
                // min lat is one of the lower corners...
                bndsWest.minLat = pt.pixel2Latitude(minX, maxY, this.frameStructure.getPolarPixelConstant());
                // max lat is center of top edge...
                bndsWest.maxLat = pt.pixel2Latitude(midX, minY, this.frameStructure.getPolarPixelConstant());
                // UL corner of frame gives us max lon...
                bndsWest.maxLon = pt.pixel2Longitude(minX, minY);
            }
            Sector        sector    = Sector.fromDegrees(bndsWest.minLat, bndsWest.maxLat, bndsWest.minLon, bndsWest.maxLon);
            BufferedImage destImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);

            resampleFrameFile(sector, frame, destImage, frameNumber, pt);
            images[0] = new RPFImage(sector, destImage);

            // East half...
            MinMaxLatLon bndsEast = new MinMaxLatLon();

            // has same latitude bounds...
            bndsEast.minLat = bndsWest.minLat;
            bndsEast.maxLat = bndsWest.maxLat;
            // max lon is LR corner, unless we're center frame...
            if (isCenterFrame(frameNumber))
            {
                bndsEast.minLon = 0.;
                bndsEast.maxLon = 180.;
            }
            else
            {
                bndsEast.minLon = pt.pixel2Longitude(maxX, minY);
                bndsEast.maxLon = 180.;
            }
            sector    = Sector.fromDegrees(bndsEast.minLat, bndsEast.maxLat, bndsEast.minLon, bndsEast.maxLon);
            destImage = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
            resampleFrameFile(sector, frame, destImage, frameNumber, pt);
            images[1] = new RPFImage(sector, destImage);

            return(images);
        }