Bits per pixel is the BitsPerComponent value in the image object

Pixels per line (POR LINHA) is _NOT_ Width * bits.  It's Width * NumComponents, 
where NumComponents is based on the colorspace in question (eg. RGB == 3, CMYK 
== 4).

-----Original Message-----
From: Fernando Gomes [mailto:fernandogomes...@hotmail.com] 
Sent: Tuesday, February 23, 2010 2:00 PM
To: itext-questions@lists.sourceforge.net
Subject: Re: [iText-questions] Using Images extracted from a pdf




>  public static BufferedImage createBufferedImageFromRawBytes(byte[]
> bytes,int width, int height, int bits) throws BadElementException,
> MalformedURLException, IOException {
>                 com.lowagie.text.Image img =
> com.lowagie.text.Image.getInstance(bytes);
>                 
>                       DataBuffer db = new DataBufferByte (img.getRawData(),
> img.getRawData().length);
>                       
>                       WritableRaster raster = Raster.createPackedRaster(db, 
> //DATA BUFFER 
>                                                                               
>                                                         width, //LARGURA
>                                                                               
>                                                         height, //ALTURA
>                                                                               
>                                                         width*bits, //LARGURA 
> * BITS POR PIXEL = PIXEL POR LINHA
> ->scanlineStride 
> //                                                                            
>                                                         bits, //BITS POR 
> PIXEL  ->pixelStride
>                                                                               
>                                                         new int [] {bits}, 
>                                                                               
>                         
>                                                                               
>                                                         null);
>                       
>                       ColorSpace cs = ColorSpace.getInstance 
> (img.getColorspace());
>                       ColorModel  cm = new ComponentColorModel(cs, false, 
> false,
> Transparency.OPAQUE, db.getDataType());
>                       BufferedImage bi = new BufferedImage (cm, raster, 
> false, null); 
>                 return null;
>         }
> 
> 

this code is up to where I could get, but there are variables that I know of
to generate bufferedImage, please someone help me see if I'm on track.
If I write something wrong.



Fernando Gomes wrote:
> 
> can anyone help-me one more time..
> i dont know what i do ..
> 
> I need to get the image bytes, now decoded...
> 
> 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);
> 
> these are all the information that I can withdraw PDF
> 
> I have to do to create my image in general ..
> I'm trying to do, or learn, but this hard, all my attempts have failed.
> ty
> 
> 
> Fernando Gomes wrote:
>> 
>> Sirs, really sorry for duplicating, can delete other topics ?
>> so sorry ..:blush:
>> 
>> very thkx for help..
>> and so good fast help ..
>> i will estudy more ..
>> 
>> 
>> Leonard Rosenthol-3 wrote:
>>> 
>>> You are assuming that PDF maintains the PNG nature of the image - that
>>> is NOT the case.  PDF only supports two kinds of images JPEG (which is
>>> why this works) and "raw bitmaps" (aka an array of bits).  So in your
>>> case, with the PNG, it is transcoded into the latter case and so if you
>>> want it back you will need to reverse the process on your end.
>>> 
>> 
>> 
>> for this response in other same email :blush:
>> quote of "1T3XT info" below ..
>> 
>> really thanks. I must have seen the realance the chapter that you
>> mentioned, I will read again and very carefully. My English is very weak,
>> and it is very difficult to read.
>> 
>> you are very funny, I laughed a lot. I know I deserved the scolding.
>> Really thanks for your help. I will test and then come back to post the
>> result.
>> Thank you!
>> 
>> 
>> 1T3XT info wrote:
>>> 
>>> Fernando Henrique Gomes wrote:
>>>> the problem is when I insert an image in PNG format and then try to get 
>>>> the same...
>>> 
>>> OK, we're talking about a PNG.
>>> If you've read chapter 10 of the 2nd edition of "iText in Action",
>>> you know that PNGs are transformed into zipped pixels.
>>> If you didn't know, you should read the book!
>>> 
>>>> on here i try to take that image...
>>>>  
>>>> [code]
>>>> int XrefIndex =((PRIndirectReference)obj).getNumber();
>>>> PdfObject pdfObj = pdf.getPdfObject(XrefIndex);
>>>> PdfStream pdfStrem = (PdfStream)pdfObj;
>>>> byte[] bytes = 
>>>> PdfReader.getStreamBytesRaw((PRStream)pdfStrem);
>>>> if ((bytes != null)) {
>>>>   String fileName = "Image_P"+pageNumber+"_";
>>>>   File file = new File(fileName);
>>>>   FileOutputStream fw = new FileOutputStream(file);
>>>>   fw.write(bytes);
>>>>   fw.flush();
>>>>   fw.close();
>>>>   BufferedImage img2 = ImageIO.read(file);
>>>>   com.lowagie.text.Image img = 
>>>> com.lowagie.text.Image.getInstance(file.toURL());
>>>>                                 }
>>>> [/code]
>>>>  
>>>> img2 returned a null !!!!
>>> 
>>> Of course, why do you think that would work???
>>> 
>>>> in line of img .. has a Excpetion
>>>> "Image_P1_ is not a recognized imageformat"
>>> 
>>> Of course, you're sending iText a bunch of pixels,
>>> but: what are the dimensions of the image,
>>> how many bits are there per component?
>>> 
>>>> when i try to do :
>>>> [code]
>>>> Image image = Toolkit.getDefaultToolkit().createImage(bytes);
>>>> [code]
>>>>  
>>>> and before create an image from this image getting the width and height 
>>>> from my PdfStream (create a buffered and draw the image)
>>>> when i serialize on a file and visualize this.. this image in a fucking 
>>>> black picture .. all black -.-
>>> 
>>> It's because you don't have a fucking clue about what you're doing :P
>>> Hehe, I was waiting for an occasion to use the F* word on the list.
>>> Thanks!
>>> 
>>>> if i use JPEG encode for my images.. all the 3 solution i have .. its 
>>>> ok.. have effects..
>>> 
>>> Well, that's because iText stores JPEGs literally as a JPEG without 
>>> changing any of the bytes. If you look inside, you'll see that the 
>>> filter is DCTDecode (Discrete Cosine Transform).
>>> 
>>>> i can vizualize my images how to i create then .. perfect..
>>>> but if i change de JPEG ... for any other encode.. thats not have efect
>>>> ..
>>> 
>>> No idea what you're saying here, but you also need to study images.
>>> 
>>>> can any help-me plz ?
>>> 
>>> This example doesn't involve iText, but explains what you're missing.
>>> 
>>> Let's create an image byte per byte:
>>> 
>>> byte b[] = new byte[256 * 3];
>>> for (int i = 0; i < 256; i++) {
>>>    b[i * 3] = (byte) (255 - i);
>>>    b[i * 3 + 1] = (byte) (255 - i);
>>>    b[i * 3 + 2] = (byte) i;
>>> }
>>> 
>>> This is how a PNG, GIF, and some other image types are stored
>>> in a PDF, but in zipped format (FlateDecode). These bytes don't
>>> make any sense if you don't know the bpc, color space and dimensions.
>>> 
>>> If you want to create an image from this bytes, you could do this:
>>> 
>>> DataBuffer db = new DataBufferByte(b, b.length);
>>> WritableRaster raster = Raster.createInterleavedRaster(
>>>    db, 16, 16, 48, 3, new int[]{0,1,2}, null);
>>> ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
>>> ColorModel cm = new ComponentColorModel(
>>>    cs, false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
>>> BufferedImage bi = new BufferedImage(cm, raster, false, null);
>>> ImageIO.write(bi, "bmp", new File("hello.bmp"));
>>> 
>>> In this example, I treat the image as 16 x 16 pixels, using RGB,
>>> and converting it to a Bitmap. It's up to you to adapt the example
>>> if your image is a GrayScale or CMYK image, or if you want another
>>> format.
>>> 
>>> (And please don't post the same question multiple times!!!)
>>> -- 
>>> This answer is provided by 1T3XT BVBA
>>> http://www.1t3xt.com/ - http://www.1t3xt.info
>>> 
>>> ------------------------------------------------------------------------------
>>> Download Intel&#174; Parallel Studio Eval
>>> Try the new software tools for yourself. Speed compiling, find bugs
>>> proactively, and fine-tune applications for parallel performance.
>>> See why Intel Parallel Studio got high marks during beta.
>>> http://p.sf.net/sfu/intel-sw-dev
>>> _______________________________________________
>>> iText-questions mailing list
>>> iText-questions@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/itext-questions
>>> 
>>> Buy the iText book: http://www.1t3xt.com/docs/book.php
>>> Check the site with examples before you ask questions:
>>> http://www.1t3xt.info/examples/
>>> You can also search the keywords list:
>>> http://1t3xt.info/tutorials/keywords/
>>> 
>>> 
>> 
>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Using-Images-extracted-from-a-pdf-tp27693711p27708516.html
Sent from the iText - General mailing list archive at Nabble.com.


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

Reply via email to