Revision 1928 branches/CqCMSDvp/libraries/libCq CMS for java.old/src-dvp/org/cresques/io/GdalFile.java
GdalFile.java | ||
---|---|---|
545 | 545 |
return raster; |
546 | 546 |
} |
547 | 547 |
|
548 |
/** |
|
549 |
* Asigna al objeto Image los valores con los dato de la imagen contenidos en el |
|
550 |
* vector de enteros. |
|
551 |
* @param image imagen con los datos actuales |
|
552 |
* @param startX inicio de la posici?n en X dentro de la imagen |
|
553 |
* @param startY inicio de la posici?n en X dentro de la imagen |
|
554 |
* @param w Ancho de la imagen |
|
555 |
* @param h Alto de la imagen |
|
556 |
* @param rgbArray vector que contiene la banda que se va a sustituir |
|
557 |
* @param offset desplazamiento |
|
558 |
* @param scansize tama?o de imagen recorrida por cada p |
|
559 |
*/ |
|
548 | 560 |
protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, |
549 | 561 |
int offset, int scansize) { |
550 | 562 |
image.setRGB(startX, startY, w, h, rgbArray, offset, scansize); |
551 | 563 |
} |
552 | 564 |
|
565 |
/** |
|
566 |
* Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores |
|
567 |
* con los dato de la imagen contenidos en el vector de enteros. De los valores RGB |
|
568 |
* que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La |
|
569 |
* banda correspondiente a flags es sustituida por los datos del vector. |
|
570 |
* @param image imagen con los datos actuales |
|
571 |
* @param startX inicio de la posici?n en X dentro de la imagen |
|
572 |
* @param startY inicio de la posici?n en X dentro de la imagen |
|
573 |
* @param w Ancho de la imagen |
|
574 |
* @param h Alto de la imagen |
|
575 |
* @param rgbArray vector que contiene la banda que se va a sustituir |
|
576 |
* @param offset desplazamiento |
|
577 |
* @param scansize tama?o de imagen recorrida por cada paso |
|
578 |
* @param flags banda que se va a sustituir (Ctes de GeoRasterFile) |
|
579 |
*/ |
|
553 | 580 |
protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, |
554 | 581 |
int offset, int scansize, int flags) { |
555 | 582 |
int [] line = new int[rgbArray.length]; |
... | ... | |
566 | 593 |
image.setRGB(startX, startY, w, h, line, offset, scansize); |
567 | 594 |
} |
568 | 595 |
|
596 |
/** |
|
597 |
* Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores |
|
598 |
* con los dato de la imagen contenidos en el vector de enteros. De los valores RGB |
|
599 |
* que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La |
|
600 |
* banda correspondiente a flags es sustituida por los datos del vector. |
|
601 |
* @param image imagen con los datos actuales |
|
602 |
* @param startX inicio de la posici?n en X dentro de la imagen |
|
603 |
* @param startY inicio de la posici?n en X dentro de la imagen |
|
604 |
* @param w Ancho de la imagen |
|
605 |
* @param h Alto de la imagen |
|
606 |
* @param rgbArray vector que contiene la banda que se va a sustituir |
|
607 |
* @param offset desplazamiento |
|
608 |
* @param scansize tama?o de imagen recorrida por cada paso |
|
609 |
* @param origBand Banda origen del GeoRasterFile |
|
610 |
* @param destBandFlag banda que se va a sustituir (Ctes de GeoRasterFile) |
|
611 |
*/ |
|
612 |
protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, |
|
613 |
int offset, int scansize, int origBand, int destBandFlag) { |
|
614 |
int [] line = new int[rgbArray.length]; |
|
615 |
image.getRGB(startX, startY, w, h, line, offset, scansize); |
|
616 |
if (origBand == 0 && destBandFlag == GeoRasterFile.RED_BAND) |
|
617 |
for (int i=0; i<line.length; i++) |
|
618 |
line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000); |
|
619 |
else if (origBand == 1 && destBandFlag == GeoRasterFile.GREEN_BAND) |
|
620 |
for (int i=0; i<line.length; i++) |
|
621 |
line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00); |
|
622 |
else if (origBand == 2 && destBandFlag == GeoRasterFile.BLUE_BAND) |
|
623 |
for (int i=0; i<line.length; i++) |
|
624 |
line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff); |
|
625 |
|
|
626 |
else if (origBand == 0 && destBandFlag == GeoRasterFile.GREEN_BAND) |
|
627 |
for (int i=0; i<line.length; i++) |
|
628 |
line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x00ff0000) >> 8) ; |
|
629 |
else if (origBand == 0 && destBandFlag == GeoRasterFile.BLUE_BAND) |
|
630 |
for (int i=0; i<line.length; i++) |
|
631 |
line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x00ff0000) >> 16); |
|
632 |
else if (origBand == 1 && destBandFlag == GeoRasterFile.RED_BAND) |
|
633 |
for (int i=0; i<line.length; i++) |
|
634 |
line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x0000ff00) << 8); |
|
635 |
|
|
636 |
else if (origBand == 1 && destBandFlag == GeoRasterFile.BLUE_BAND) |
|
637 |
for (int i=0; i<line.length; i++) |
|
638 |
line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x0000ff00) >> 8); |
|
639 |
else if (origBand == 2 && destBandFlag == GeoRasterFile.RED_BAND) |
|
640 |
for (int i=0; i<line.length; i++) |
|
641 |
line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x000000ff) << 16); |
|
642 |
else if (origBand == 2 && destBandFlag == GeoRasterFile.GREEN_BAND) |
|
643 |
for (int i=0; i<line.length; i++) |
|
644 |
line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x000000ff) << 8); |
|
645 |
image.setRGB(startX, startY, w, h, line, offset, scansize); |
|
646 |
} |
|
647 |
|
|
569 | 648 |
private void showOnOpen() { |
570 | 649 |
// Report en la apertura (quitar) |
571 | 650 |
System.out.println("Fichero GDAL '"+getName()+"' abierto."); |
... | ... | |
583 | 662 |
} |
584 | 663 |
|
585 | 664 |
/* (non-Javadoc) |
586 |
* @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int) |
|
665 |
* @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int, int)
|
|
587 | 666 |
*/ |
588 |
public Image updateImage(int width, int height, ICoordTrans rp, Image img, int flags) { |
|
667 |
public Image updateImage(int width, int height, ICoordTrans rp, Image img, int origBand, int destBandFlag){ |
|
668 |
|
|
589 | 669 |
double dFileAspect, dWindowAspect; |
590 | 670 |
int line, pRGBArray[] = null; |
591 | 671 |
|
... | ... | |
603 | 683 |
file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(), |
604 | 684 |
width, height); |
605 | 685 |
|
686 |
if(width<=0)width=1; |
|
687 |
if(height<=0)height=1; |
|
688 |
|
|
606 | 689 |
pRGBArray = new int[width/**BAND_HEIGHT*/]; |
607 | 690 |
try { |
608 |
//int nLin = height % BAND_HEIGHT; |
|
609 | 691 |
setBand(RED_BAND, rBandNr); |
610 | 692 |
setBand(GREEN_BAND, gBandNr); |
611 | 693 |
setBand(BLUE_BAND, bBandNr); |
612 | 694 |
file.setAlpha(getAlpha()); |
613 |
for (line=0; line < height; line++) { //+=BAND_HEIGHT) { |
|
614 |
//int bandH = Math.min(BAND_HEIGHT, height-line); |
|
615 |
//file.readBandRGBA(bandH, BAND_HEIGHT, pRGBArray); |
|
616 |
file.readLineRGBA(pRGBArray); |
|
617 |
setRGBLine((BufferedImage) img, 0, line, width, 1/*bandH*/, pRGBArray, 0, width, flags); |
|
695 |
if(img!=null){ |
|
696 |
for (line=0; line < height; line++) { |
|
697 |
file.readLineRGBA(pRGBArray); |
|
698 |
setRGBLine((BufferedImage) img, 0, line, width, 1/*bandH*/, pRGBArray, 0, width, origBand, destBandFlag); |
|
699 |
} |
|
700 |
return img; |
|
701 |
}else{ |
|
702 |
Image image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); |
|
703 |
for (line=0; line < height; line++) { |
|
704 |
file.readLineRGBA(pRGBArray); |
|
705 |
setRGBLine((BufferedImage) image, 0, line, width, 1/*bandH*/, pRGBArray, 0, width); |
|
706 |
} |
|
707 |
return image; |
|
618 | 708 |
} |
619 | 709 |
} catch (Exception e) { |
620 | 710 |
// TODO Auto-generated catch block |
... | ... | |
623 | 713 |
|
624 | 714 |
return img; |
625 | 715 |
} |
626 |
|
|
716 |
|
|
627 | 717 |
/* (non-Javadoc) |
628 | 718 |
* @see org.cresques.io.GeoRasterFile#getData(int, int, int) |
629 | 719 |
*/ |
Also available in: Unified diff