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

View differences:

MrSidFile.java
19 19

  
20 20
/**
21 21
 * @author Nacho Brodin <brodin_ign@gva.es>
22
 *
23
 * TODO To change the template for this generated type comment go to
24
 * Window - Preferences - Java - Code Style - Code Templates
22
 * Soporte para los fichero MrSID de Lizardtech
25 23
 */
26 24

  
27 25
class MrSidNative extends MrSIDImageReader {
......
520 518
		pRGBArray = new int[width*height];
521 519
		
522 520
		try {		
523
			//System.out.println("1.5========>"+width+","+height);
524 521
			file.setAlpha(getAlpha());
525 522
			setBand(RED_BAND,   rBandNr);
526 523
			setBand(GREEN_BAND, gBandNr);
......
549 546
  		file.pintaPaleta();
550 547

  
551 548
	}
549
	
550
	/**
551
	 * Asigna al objeto Image los valores con los dato de la imagen contenidos en el 
552
	 * vector de enteros.
553
	 * @param image	imagen con los datos actuales
554
	 * @param startX	inicio de la posici?n en X dentro de la imagen
555
	 * @param startY	inicio de la posici?n en X dentro de la imagen
556
	 * @param w	Ancho de la imagen
557
	 * @param h	Alto de la imagen
558
	 * @param rgbArray	vector que contiene la banda que se va a sustituir
559
	 * @param offset	desplazamiento
560
	 * @param scansize	tama?o de imagen recorrida por cada p
561
	 */
562
	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
563
			 int offset, int scansize) {
564
		image.setRGB(startX, startY, w, h, rgbArray, offset, scansize);
565
	}
566
	
567
	/**
568
	 * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores 
569
	 * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
570
	 * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
571
	 * banda correspondiente a flags es sustituida por los datos del vector.
572
	 * @param image	imagen con los datos actuales
573
	 * @param startX	inicio de la posici?n en X dentro de la imagen
574
	 * @param startY	inicio de la posici?n en X dentro de la imagen
575
	 * @param w	Ancho de la imagen
576
	 * @param h	Alto de la imagen
577
	 * @param rgbArray	vector que contiene la banda que se va a sustituir
578
	 * @param offset	desplazamiento
579
	 * @param scansize	tama?o de imagen recorrida por cada paso
580
	 * @param flags	banda que se va a sustituir (Ctes de GeoRasterFile)
581
	 */
582
	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
583
			 int offset, int scansize, int flags) {
584
		int [] line = new int[rgbArray.length]; 
585
		image.getRGB(startX, startY, w, h, line, offset, scansize);
586
		if (flags == GeoRasterFile.RED_BAND)
587
			for (int i=0; i<line.length; i++)
588
				line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
589
		else if (flags == GeoRasterFile.GREEN_BAND)
590
			for (int i=0; i<line.length; i++)
591
				line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
592
		else if (flags == GeoRasterFile.BLUE_BAND)
593
			for (int i=0; i<line.length; i++)
594
				line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
595
		image.setRGB(startX, startY, w, h, line, offset, scansize);
596
	}
597
	
552 598

  
599
	/**
600
	 * Asigna al objeto Image la mezcla entre los valores que ya tiene y los valores 
601
	 * con los dato de la imagen contenidos en el vector de enteros. De los valores RGB
602
	 * que ya contiene se mantienen las bandas que no coinciden con el valor de flags. La
603
	 * banda correspondiente a flags es sustituida por los datos del vector.
604
	 * @param image	imagen con los datos actuales
605
	 * @param startX	inicio de la posici?n en X dentro de la imagen
606
	 * @param startY	inicio de la posici?n en X dentro de la imagen
607
	 * @param w	Ancho de la imagen
608
	 * @param h	Alto de la imagen
609
	 * @param rgbArray	vector que contiene la banda que se va a sustituir
610
	 * @param offset	desplazamiento
611
	 * @param scansize	tama?o de imagen recorrida por cada paso
612
	 * @param origBand	Banda origen del GeoRasterFile
613
	 * @param destBandFlag	banda que se va a sustituir (Ctes de GeoRasterFile)
614
	 */
615
	protected void setRGBLine(BufferedImage image, int startX, int startY, int w, int h, int[] rgbArray, 
616
			 int offset, int scansize, int origBand, int destBandFlag) {
617
		int [] line = new int[rgbArray.length]; 
618
		image.getRGB(startX, startY, w, h, line, offset, scansize);
619
		if (origBand == 0 && destBandFlag == GeoRasterFile.RED_BAND)
620
			for (int i=0; i<line.length; i++)
621
				line[i] = (line[i] & 0x0000ffff) | (rgbArray[i] & 0xffff0000);
622
		else if (origBand == 1 && destBandFlag == GeoRasterFile.GREEN_BAND)
623
			for (int i=0; i<line.length; i++)
624
				line[i] = (line[i] & 0x00ff00ff) | (rgbArray[i] & 0xff00ff00);
625
		else if (origBand == 2 && destBandFlag == GeoRasterFile.BLUE_BAND)
626
			for (int i=0; i<line.length; i++)
627
				line[i] = (line[i] & 0x00ffff00) | (rgbArray[i] & 0xff0000ff);
628
		
629
		else if (origBand == 0 && destBandFlag == GeoRasterFile.GREEN_BAND)
630
			for (int i=0; i<line.length; i++)
631
				line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x00ff0000) >> 8) ;
632
		else if (origBand == 0 && destBandFlag == GeoRasterFile.BLUE_BAND)
633
			for (int i=0; i<line.length; i++)
634
				line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x00ff0000) >> 16);
635
		else if (origBand == 1 && destBandFlag == GeoRasterFile.RED_BAND)
636
			for (int i=0; i<line.length; i++)
637
				line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x0000ff00) << 8);
638
		
639
		else if (origBand == 1 && destBandFlag == GeoRasterFile.BLUE_BAND)
640
			for (int i=0; i<line.length; i++)
641
				line[i] = (line[i] & 0xffffff00) | ((rgbArray[i] & 0x0000ff00) >> 8);
642
		else if (origBand == 2 && destBandFlag == GeoRasterFile.RED_BAND)
643
			for (int i=0; i<line.length; i++)
644
				line[i] = (line[i] & 0xff00ffff) | ((rgbArray[i] & 0x000000ff) << 16);
645
		else if (origBand == 2 && destBandFlag == GeoRasterFile.GREEN_BAND)
646
			for (int i=0; i<line.length; i++)
647
				line[i] = (line[i] & 0xffff00ff) | ((rgbArray[i] & 0x000000ff) << 8);
648
		image.setRGB(startX, startY, w, h, line, offset, scansize);
649
	}
650
	
553 651
	/* (non-Javadoc)
554 652
	 * @see org.cresques.io.GeoRasterFile#updateImage(int, int, org.cresques.cts.ICoordTrans, java.awt.Image, int)
555 653
	 */
556
	public Image updateImage(int width, int height, ICoordTrans rp, Image img, int flags) {
557
		// TODO Auto-generated method stub
558
		return null;
654
	public Image updateImage(int width, int height, ICoordTrans rp, Image img, int origBand, int destBandFlag) {
655
		double dFileAspect, dWindowAspect;
656
		int line, pRGBArray[] = null;
657
		Image mrSidImage = null;
658
		
659
		// Work out the correct aspect for the setView call.
660
		dFileAspect = (double)v.width()/(double)v.height();
661
		dWindowAspect = (double)width /(double)height;
662

  
663
		if (dFileAspect > dWindowAspect) {
664
		  height =(int)((double)width/dFileAspect);
665
		} else {
666
		  width = (int)((double)height*dFileAspect);
667
		}
668
		
669
		// Set the view
670
		
671
		file.setView(v.minX(), v.maxY(), v.maxX(), v.minY(),width, height);
672
				
673
		//Impedimos que los valores de ancho y alto de la im?gen sean menores que 1
674
		
675
		if(width<=0)width=1;
676
		if(height<=0)height=1;
677
		
678
		file.setAlpha(getAlpha());
679
		setBand(RED_BAND,   rBandNr);
680
		setBand(GREEN_BAND, gBandNr);
681
		setBand(BLUE_BAND,  bBandNr);
682
		
683
		pRGBArray = new int[width*height];
684
		
685
		if(img==null){	//Caso en el que se crea una imagen
686
			mrSidImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
687
			try {			
688
				file.readScene(pRGBArray);
689
				//((BufferedImage)mrSidImage).setRGB(0, 0, width, height, pRGBArray, 0, width);
690
				setRGBLine((BufferedImage) mrSidImage, 0, 0, width, height, pRGBArray, 0, width);
691
			} catch (Exception e) {
692
				e.printStackTrace();
693
			}
694
			return mrSidImage;
695
		}else{ //Caso en el que se actualiza una banda del Image
696
			try {			
697
				file.readScene(pRGBArray);
698
				//((BufferedImage)img).setRGB(0, 0, width, height, pRGBArray, 0, width);
699
				setRGBLine((BufferedImage) img, 0, 0, width, height, pRGBArray, 0, width, origBand, destBandFlag);
700
			} catch (Exception e) {
701
				e.printStackTrace();
702
			}
703
			return img;
704
		}
559 705
	}
560

  
706
	
561 707
	/* (non-Javadoc)
562 708
	 * @see org.cresques.io.GeoRasterFile#getData(int, int, int)
563 709
	 */

Also available in: Unified diff