diff --git a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java
--- a/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java
+++ b/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/xobject/PDJpeg.java
@@ -24,8 +24,8 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayInputStream;
-import java.io.FileOutputStream;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -180,18 +180,19 @@ public class PDJpeg extends PDXObjectImage
      */
     public BufferedImage getRGBImage() throws IOException
     {   //TODO PKOCH
-        File imgFile = null;
         BufferedImage bi = null;
         boolean readError = false;
         try 
         {
-            imgFile = File.createTempFile("pdjpeg", ".jpeg");
-            write2file(imgFile);
+            ByteArrayOutputStream os = new ByteArrayOutputStream();
+            write2OutputStream(os);
+            os.close();
+            byte[] img = os.toByteArray();
 
             // 1. try to read jpeg image
             try 
             {
-                bi = ImageIO.read(imgFile);
+                bi = ImageIO.read(new ByteArrayInputStream(img));
             } 
             catch (IIOException iioe) 
             {
@@ -207,32 +208,15 @@ public class PDJpeg extends PDXObjectImage
             // TODO : not sure if it works for all cases
             if (bi == null && readError) 
             {
-                byte[] newImage = replaceHeader(imgFile);
+                byte[] newImage = replaceHeader(img);
 
                 ByteArrayInputStream bai = new ByteArrayInputStream(newImage);
 
-                // persist file temporarely, because i was not able to manage
-                // to call the ImageIO.read(InputStream) successfully.
-                FileOutputStream o = new FileOutputStream(imgFile);
-                byte[] buffer = new byte[512];
-                int read;
-                while ((read=bai.read(buffer)) >0) 
-                {
-                   o.write(buffer, 0, read);
-                }
-
-                bai.close();
-                o.close();
-
-                bi = ImageIO.read(imgFile);
+                bi = ImageIO.read(bai);
             }
         } 
         finally 
         {
-            if (imgFile != null) 
-            {
-                imgFile.delete();
-            }
         }
         
         // If there is a 'soft mask' image then we use that as a transparency mask.
@@ -322,11 +306,8 @@ public class PDJpeg extends PDXObjectImage
         return 0;
     }
 
-    private byte[] replaceHeader(File jpegFile) throws IOException 
+    private byte[] replaceHeader(byte[] image)
     {
-        // read image into memory
-        byte[] image = getBytesFromFile(jpegFile);
-
         // get end position of wrong header respectively startposition of "real jpeg data"
         int pos = getHeaderEndPos(image);
 
