[RESOLVIDO] Ajuda com imagen + FlateEncode + pdf + itext

SEGUINTE …
Dessa vez ta foda -.-.

  • tenho um pdf;
  • o pdf tem imagens;
  • eu uso a api iText pra pegar as imagens;
  • a api me retorna os bytes das imagens;

com jpeg a coisa flui normal…

PROBLEMA:
para jpegs o iText nao faz nenhum tratamento… nenhum encode…
MAS …
para outros tipos como PNG … ele faz um FlateEncode … um tipo de zip do proprio java …
entao… quando me volta os bytes da imagem… ele ta compactado…

eu to pegando o proprio método da api … pra fazer o decod…

byte[] bytesDecod = PdfReader.FlateDecode(bytes);

ele me retorno os bytes descompactados…
esses bytes representam uma imagen …

MAS EU NÃO SEI O TIPO DELA…
pode ser em P&B pode ser colorido …
pode ser png…
pode ser BMP …

até entao… pelo que eu sei esses bytes tao como imagem pura…
acho que bmp mesmo…

a principio a primeira coisa q eu quero fazer é pegar esse meu array de byte e conseguir gerar um arquivo de imagem.

simples assim…

tipo…
pra jpeg… eu apenas faço isso …

[code]}else{

									Image image = Toolkit.getDefaultToolkit().createImage(bytes);
									images.add(ImageUtils.toBufferedImage(image,
												 Integer.parseInt(pdfStrem.get(PdfName.WIDTH).toString()),
												 Integer.parseInt(pdfStrem.get(PdfName.HEIGHT).toString())));[/code]

e funciona…
ele me retorna uma bufferedImage valida… que eu serializo e posso visualizar…

mas para aqueles bytes decodados nao…

HELP URGENTE.

String colorSpace = pdfStrem.get(PdfName.COLORSPACE).toString(); String filter = pdfStrem.get(PdfName.FILTER).toString(); int bits = Integer.valueOf(pdfStrem.get(PdfName.BITSPERCOMPONENT).toString()); int width = Integer.valueOf(pdfStrem.get(PdfName.WIDTH).toString()); int height = Integer.valueOf(pdfStrem.get(PdfName.HEIGHT).toString()); PdfDictionary param = (PdfDictionary)pdfStrem.get(PdfName.DECODEPARMS); int colors = Integer.valueOf(param.get(PdfName.COLORS).toString()); int predictor = Integer.valueOf(param.get(PdfName.PREDICTOR).toString()); int colums = Integer.valueOf(param.get(PdfName.COLUMNS).toString()); if(filter.equals("/FlateDecode")) { byte[] bytesDecod = PdfReader.FlateDecode(bytes);

Bom isso é tudo as informações que eu consigo pegar do meu pdf sobre a imagem…

alguem poderia me explicar o que é … e como eu pego ou calculo o band offSet da imagem ?


RESOLVIDO USANDO ITEXT+PDF RENDERER USEI UMA MISTURA DE CLASSES …

ALGUM ESPECIALISTA EM IMAGENS AE ??? :!:
ta foda…
aqui é até aonde eu consegui chegar…
a classe com.lowagie.text.Image do iText tem um construtor com array de bytes puros e talz… e me traz umas infos legais…
mas ta foda de trasnformar isso em buferred heim !
PQP …
eu n sei direito o que tenho que fazer…
alguem ajudaa

[code] public static BufferedImage createBufferedImageFromRawBytes(byte[] bytes,int width, int height, int bits, int colorSpace) throws BadElementException, MalformedURLException, IOException {

	  	DataBuffer db = new DataBufferByte (bytes, bytes.length);
		ColorSpace cs = ColorSpace.getInstance (colorSpace);
		
		//COMO EU DECIDO QUE PACKEDRASTER EU CRIO ?? SERIA BASEADO NO DATATYPE DO MEU DATA BUFFER ?
	  	switch(db.getDataType()){
			case DataBuffer.TYPE_INT: 
				
				break;
			
		}
	  	
		WritableRaster raster = Raster.createPackedRaster(db, //DATA BUFFER 
																width, //LARGURA
																height, //ALTURA
																width*cs.getNumComponents(), //LARGURA *NUM COMP ->scanlineStride 

// bits, //BITS POR PIXEL ->pixelStride
new int [] {bits},

																null);
		
		ColorSpace cs = ColorSpace.getInstance (img.getColorspace());
		//COMO EU DECIDO O COLOR MODEL ??? GENERICAMENTE .. COM BASE NOS BITS P/ PIXEL ? NO QUE ??
		ColorModel  cm = new ComponentColorModel(cs, false, false, Transparency.OPAQUE, db.getDataType());
		BufferedImage bi = new BufferedImage (cm, raster, false, null); 
	  return null;
  }[/code]

alguem que queria ajudar que possa dar uma olhada aki também…
http://old.nabble.com/Using-Images-extracted-from-a-pdf-tt27693711.html