Revision 1928 branches/CqCMSDvp/libraries/libCq CMS for java.old/src-dvp/org/cresques/io/GdalFile.java

View differences:

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