private void computeRectDouble(PlanarImage src, RasterAccessor dst) {
        RandomIter iter = RandomIterFactory.create(src, src.getBounds());

        int minX = src.getMinX();
        int maxX = src.getMaxX();
        int minY = src.getMinY();
        int maxY = src.getMaxY();

        int dstWidth = dst.getWidth();
        int dstHeight = dst.getHeight();
        int dstBands = dst.getNumBands();

        int lineStride = dst.getScanlineStride();
        int pixelStride = dst.getPixelStride();
        int[] bandOffsets = dst.getBandOffsets();
        double[][] data = dst.getDoubleDataArrays();

        float[] warpData = new float[2 * dstWidth];

        int lineOffset = 0;

        for (int h = 0; h < dstHeight; h++) {
            int pixelOffset = lineOffset;
            lineOffset += lineStride;

            warp.warpRect(dst.getX(), dst.getY()+h, dstWidth, 1,
                          warpData);
            int count = 0;
            for (int w = 0; w < dstWidth; w++) {
                /*
                 * The warp object subtract 0.5 from backward mapped
                 * source coordinate. Need to do a round to get the
                 * nearest neighbor. This is different from the standard
                 * nearest implementation.
                 */
                int sx = round(warpData[count++]);
                int sy = round(warpData[count++]);

                if (sx < minX || sx >= maxX || sy < minY || sy >= maxY) {
                    /* Fill with a background color. */
                    if (setBackground) {
                        for (int b = 0; b < dstBands; b++) {
                            data[b][pixelOffset+bandOffsets[b]] =
                                backgroundValues[b];
                        }
                    }
                } else {
                    for (int b = 0; b < dstBands; b++) {
                        data[b][pixelOffset+bandOffsets[b]] =
                            iter.getSampleDouble(sx, sy, b);
                    }
                }

                pixelOffset += pixelStride;
            }
        }
    }