Image processing - OutOfMemoryError

I have a question about image processing programs. I want to write an image processing program (more as an exercise), so far I have succeeded with a few steps. I am able to create a new document and display it's contents on screen. It's based on the BufferedImage class basically. Now the problem is, when I enter dimensions in a New dialog to be 30000x30000 (that's a limit in Photoshop) I get an OutOfMemoryError such as below. How can I write a program that can be competitive to Adobe Photoshop. Photoshop can handle 30000x30000 pixels (and remember, it can have multiple layers etc.). How to achieve that in Java? Also, Photoshop (in the Preferences pane) allows to set the memory usage, there is a slider and one can just set how much memory Photoshop is about to utilize. Is that possible in Java?
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
        at pr.g.Picture.<init>(
        at canvas01.DocHandler.createNewDoc(
        at canvas01.CanvasGUI.actionPerformed(
        at javax.swing.AbstractButton.fireActionPerformed(
        at javax.swing.AbstractButton$Handler.actionPerformed(
        at javax.swing.DefaultButtonModel.fireActionPerformed(
        at javax.swing.DefaultButtonModel.setPressed(
        at javax.swing.AbstractButton.doClick(
        at javax.swing.AbstractButton.doClick(
        at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(
        at javax.swing.SwingUtilities.notifyAction(
        at javax.swing.JComponent.processKeyBinding(
        at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(
        at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(
        at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(
        at javax.swing.JMenuBar.processKeyBinding(
        at javax.swing.KeyboardManager.fireBinding(
        at javax.swing.KeyboardManager.fireKeyboardAction(
        at javax.swing.JComponent.processKeyBindingsForAllComponents(
        at javax.swing.SwingUtilities.processKeyBindings(
        at javax.swing.UIManager$2.postProcessKeyEvent(
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(
        at java.awt.Component.dispatchEventImpl(
        at java.awt.Container.dispatchEventImpl(
        at java.awt.Window.dispatchEventImpl(
        at java.awt.Component.dispatchEvent(
        at java.awt.EventQueue.dispatchEventImpl(
        at java.awt.EventQueue.access$000(

user5287726 wrote:
Andrew Thompson wrote:
Aardenon wrote:
..How can I write a program that can be competitive to Adobe Photoshop. ..Hire a team of programmers & analysts of the same general size as what Adobe assigns to Photoshop?
.. Photoshop can handle 30000x30000 pixels (and remember, it can have multiple layers etc.). How to achieve that in Java? .. Increase the memory size assigned to the app. at start-up. No, wait.. those figures would suggest the image takes up 900 MPix, and given 4 bytes per pixel (RGBA) would increases that to around 3.6 Gb. Java has a hard limit around 2 Gb, AFAIR.
Use a disk based store?If the OP is running a 64-bit OS, just use a 64-bit JVM. On a machine with a lot of RAM."My super duper Photoshop clone. Minimal system requirements: 64 bits CPU and 4gb of memory".
Although I would laugh to see that happen, I would cry at the same time because people will of course blame such ridiculous practices on the fact that Java is used.

Similar Messages

  • Image Processing in C#

    What I want to do is as in the following.
    1. Load image from jpg/bmp file and display on the PictureBox or any other image control keeping image ratio
    2. Perform Image Processing, for example, zoom in/zoom out, change brightness/contrast
    Does any .NET class supports this? or should I implement it with my own code?
    If I should make my own code, is the PictureBox optimal control?

    Hmm.  If you don't know where to start then maybe the do-it-yourself approach is not going to work for you.
    Here's code for a simple control you can use to display an image with a transform matrix and a color matrix.
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.Windows.Forms;
    class ImageControl : Control
    public Image Image
    return image;
    image = value;
    private Image image;
    public Matrix Transform
    return transform;
    transform = value;
    private Matrix transform = new Matrix();
    public ColorMatrix ColorMatrix
    return colorMatrix;
    colorMatrix = value;
    private ColorMatrix colorMatrix = new ColorMatrix();
    protected override void OnResize( EventArgs e )
    public ImageControl()
    this.DoubleBuffered = true;
    protected override void OnPaint( PaintEventArgs e )
    if( image == null ) return;
    e.Graphics.Transform = transform;
    ImageAttributes imageAttributes = new ImageAttributes();
    ColorAdjustType.Bitmap );
    new Rectangle( 0, 0, image.Width, image.Height),
    0, 0, image.Width, image.Height,
    imageAttributes );
    You can set a transformation matrix to do the zooming, panning, etc.  And set a color matrix to do simple contrast brightness adjustments.
    // Some example matrices
    float[][] colorMatrixElements = {
    new float[] {2, 0, 0, 0, 0}, // red scaling factor of 2
    new float[] {0, 1, 0, 0, 0}, // green scaling factor of 1
    new float[] {0, 0, 1, 0, 0}, // blue scaling factor of 1
    new float[] {0, 0, 0, 1, 0}, // alpha scaling factor of 1
    new float[] {.2f, .2f, .2f, 0, 1}}; // three translations of 0.2
    ColorMatrix colorMatrix = new ColorMatrix( colorMatrixElements );
    Matrix transform = new Matrix(
    1.5f, 0.0f, // horizontal scale of 1.5, 0
    0.0f, 0.5f, // 0, vertical scale of 0.5
    20.0f, 40.0f, // horizontal offset of 20, vertical offset of 40
    Contrast and brightness are performed together in a single matrix.  Contrast scales the output range and brightness is the offset.
    Zooming is just scale and offset.

  • Image processing with imaq vision with 2 webcams on the same computer

    I'm currently trying to set up 2 usb webcams (logitech quickcam for notebooks pro). I want to be able to have them both run simultaneously and do some image processing with the images that I get from both cameras with labview and imaq vision.
    As of right now, I'm having trouble getting both cameras to run at the same time. Any help would be gladly appreciated. Thanks.

    The USB IMAQ driver will not support running 2 USB cameras at a time (I believe it is a limitation of the DirectShow interface). You could open one camera, acuqire an image, close the reference to that camera and then do the same for the second camera.
    If you need simultaneous acquisition, look at possibly moving to 1394 cameras or analog cameras.

  • Image processing

       I am a beginner in LAB View am using labview 2013.i want to do image recognition using labview.can you please give me some basic programs on image processing and image recognition so that  i can understand atleast image acquisition and processing.i have only lab view software sir.should i download any other software for image processing? if so which software and is it free?please give me the link also sir.please help.
                         thank you.

    you can use LabVIEW to do image recognition. Here is an example of the basic functions to do so. You can also search some examples with the Example Finder.
    This little program looks for an image in a folder. He analyses each picture, and makes a comparision between the searched picture and the pictures in the folder.
    I hope it will help
    Giuliano Franchetto
    Student at the l'Ecole Nationale Supérieure des Mines de Saint-Etienne, cycle ISMIN (FRANCE)
    img ‏43 KB

  • Image Processing in Bridge lost PSD originals HELP!

    I am somewhat new to using Adobe Bridge CS4 super frequently, I have been processing batches of images mostly using the 'Image Process' function under tools>photoshop>image processing. I was using it to watermark my photos and size them down. It worked great, did everything I wanted it too and made it's own JPEG folder with all my processed images. HOWEVER I just discovered that when I process them it is somehow is taking the original image and flattening it so it looks like a JPEG even though the file still thinks it's a PSD file. The size is small and all the layers are gone, basically it looks EXACTLY like the JPEG file I'd just made but it's the original file and it's still a PSD (in theory!). I've been racking my brain trying to figure out when I'm doing wrong here! Been all over the internet trying to find a similar situation and I've had no luck. Any thoughts? I'd really appreciate the help. These particular photos are ready to go to print, but I've got my watermark on them and can't exactly remove the layer that isn't there anymore! HELP

    Yes I was converting images from PSD to JPEG with the image processing but I was running an action (within the same dialog box) to make the file sizes much smaller for easy upload to the web? Does running an action affect the original as well as the processed images?

  • Image Processing in Java (E-Book) Request

    Can anyone post the links for this e-book
    i think this e-book is,iam requesting all of you.
    Image Processing in Java
    by Douglas A. Lyon
    Publisher: Prentice Hall PTR; Bk&CD-Rom edition (March 1, 1999)
    Language: English
    ISBN: 0139745777

    Check ebay, amazon or your local seller for a copy. Or if you want a free copy, write the author (maybe he's a generous fellow), but don't bother people on this forum with posts like this.
    - Travis

  • Image processing over wireless

    One of our subsidaries has a setup where continuous video stream is generated from certain application servers processing real time image processing.
    The setup goes this way; 3 PC's which run these image processing & are connected to a 3750G switch.
    This switch is uplinked to an access point which then carries all these over wireless to the image processing main server.
    About two weeks ago, when they tested this ,all 3 PC's had issues running together when operators viewed/worked upon the images on them.
    When either one or two of them is turned off, the rest works fine with no disturbance( intermediate stop & start of images ).
    Please help with suggestions on what could be the cause. I suspect bandwidth, but since this doesn't cover any WAN links, i doubt that bandwidth is actually the problem.
    Thanks in advance.

    It depends. QoS will help if your having congestion on the wired side. WMM QoS will help for over the air. I would look at the switch port and see if you see drops on both the map and rap side. You might just be over utilizing the backhaul. Remember that it is half duplex link so that can be an issue also. I had an install with regular AP's and 3gb video uploads within 30 minutes and the only way to achieve that is only allowing 4-5 clients per AP. the testing you have done seems to show that the max you can do over that link is 2. How much other traffic is using the wireless. Maybe try to isolate those traffic on a separate RAP/MAP pair using AP Groups.
    Sent from Cisco Technical Support iPhone App

  • Image processing from .txt file onto an intensity graph

    I am doing a mini project in my class and I was wondering if anyone could help me. It about image processing but I am bit stuck.
    Heres the idea:
    "An image is really nothing more than a 2D array of data. The value of every element in the array corresponds to the brightness of the image at that point.
    In this project you will create a VI which loads a 2D array of data and then displays it on the screen using the Intensity Graph. Three example files (boats.txt, gordon.txt and parrot.txt) are available on the module webpage that you can use. However, you can also use any other black and white image you like, but will need to convert it to a “text image” first. To do this you can use some software called “ImageJ” which is available on the computers and is free to download.
    You can vary the brightness of an image by adding the same value to every element in the array.
    The contrast of an image is adjusted by multiplying every element in the array by the same value. Using numerical controls and simple array mathematics, you should adjust the brightness and contrast of your displayed image.
    Some other ideas that you could try with image manipulation are:
    o Invert an image (change black to white and white to black)"
    First I am having problems putting my picture onto the graph. It is in the write file but the colours are not correct and the image has rotated 90 degrees. I will upload my VI so far when I get back onto my computer.
    Would really appricate the help! Thank you for reading

    Hi charlthedancer,
    Here is an example to get you started.
    Kind regards,
    Attachments: ‏14 KB

  • Image Processing- comparing JPeg files

    Hi All,
    sorry for posting this question at this forum, but I could not find a separate forum for Image Processing. (although i could search for such forums, but i believe they are taken off.)
    I want to compare one input jpeg file with 10 existing files and find the closest match.
    can someone give me pointers to start with. i believe there are tools to achieve this.
    thanx n regards

    Not sure about the way you are using, but look at these links.
    Resizing Photos for Emailing
    Resize JPEG Files
     Cheers, Tom

  • Image Processing Performance Issue | JAI

    I am processing TIFF images to generate several JPG files out of it after applying image processing on it.
    Following are the transformations applied:
    1. Read TIFF image from disk. The tiff is available in form of a PlanarImage object
    2. Scaling
         /* Following is the code snippet */
         PlanarImage origImg;
         ParameterBlock pb = new ParameterBlock();
         PlanarImage scaledImage = JAI.create("scale", pb);3. Convertion of planar image to buffered image. This operation is done because we need a buffered image.
         /* Following is the code snippet used */
         bufferedImage = planarImage.getAsBufferedImage();4. Cropping
         /* Following is the code snippet used */
         bufferedImage = bufferedImage.getSubimage(artcleX, artcleY, 302, 70);The performance bottle neck in the above algorithm is step 3 where we convert the planar image to buffered image before carrying out cropping.
    The operation typically takes about 1120ms to complete and considering the data set I am dealing with this is a very expensive operation. Is there an
    alternate to the above mentioned approach?
    I presume if I can carry out the operation mentioned under step 4 above on a planr image object instead of buffered image, I will be able to save
    considerable processing time as in this case step 3 won't be required. (and that seems like the bottle neck). I have also noticed that the processing
    time of the operation mentioned in step 3 above is proportional to the size of the planar image object.
    Any pointers around this would be appreciated.
    Edited by: anurag.kapur on Oct 4, 2007 10:17 PM
    Edited by: anurag.kapur on Oct 4, 2007 10:17 PM

    It depends on whether you want to display the data or not.
    PlanarImage (the subclass of all renderedOps) has a method that returns a Graphics object you can use to draw on the image. This allows you to do this like write on an image.
    PlanarImage also has a getAsBufferedImage that will return a copy of the data in a format that can be used to write to Graphics objects. This is used for simply drawing processed images to a display.
    There is also a widget called ImageCanvas (and ScrollingImagePanel) shipped with JAI (although it is not a committed part of the API). These derive from awt.Canvas/Panel and know how to render RenderedImage instances. This may use less copying/memory then getting the data as a BufferedImage and drawing it via a Graphics Object. I can't say for sure though as I have never used them.
    Another way may be to extend JComponent (or another class) and customize it to use calls to PlanarImage/RenderedOp instances directly. This can hep with large tiled images when you only want to display a small portion.

  • Image processing Manupulation problem!!!

    Dear all,
    God Morning! hope u all are fine .. i have an issue regarding Image processing Manipulation.
    i want to give u all the details.. what i have done so far in java.
    i have used third party tool of java called ImageJ editor for image manipulation.i got the source of it i have made neccessary customization to store / fetch the image from my table (Database).now this editor is working fine when i click on open option from menu bar it fetches the image from database and after fetching it put the image on container where one can edit/ modify the image and save it back to the table.
    the above proceeds me to display or store the edited image on the database . now i just want to integrate the editor on browser ..
    how to call the class file when i click on the link on specified page and also how to pass parameter from jsp page to java class file.??
    please help me to sort out d problem
    "Thanks and regards"

    Increasing the contrast springs to mind.
    When used to extremes it is sometimes called
    Suppose your image was in 16 colors, you could
    reasonably safely assume at least two are red, two
    are blue, two are yellow ect.
    With regards an algorithm you are looking to 'round
    off' the color values to (my suggestion only) the
    nearest 64 or even the nearest 127...
    Bamkinjust be careful of that ORANGE color. Orange is a tricky color to define in either RGB or HSB, and is very similar to red and yellow. A little change in either direction makes it difficult to distinguish from one or the other.
    my thought would be to try to force your image to only six colors. Then those colors (it wouldn't really matter if they were accurate, as long as they are correctly distinguished) would be easy to identify.
    - Adam

  • Image processing with BLOBS: how to write BufferedImage to a BLOB

    Hi everybody - thanks in advance for any input on that topic.
    I'm doing image processing using AWT and 2D. Images are stored in a RDBMS as BLOB Type, which I get using JDBC and convert to a BufferedImage using a JDBCImageDecoder.
    Now, I have my BufferedImage and I can process them using the appropriate filters (ConvolveOp e.g.)
    Writing the BufferedImages to disk or display on screen is easy. But I can't get to write them to a BLOB Object. Any Hint ?
    (Of course, I'm speaking of oracle.sql.BLOB objects, not java.sql.Blob).
    Thanks and have a nice day

    Thank you for your answer. I have two questions.
    First what that means "Bob's your uncle ?" I'm a french man, not used to english special sentences ou jargon. Would enjoy to know !
    Second, I have created a PL/SQL procedure to update my table. I face a problem.
    I want to initialize b_lob with the img_blob value but I get an error : "ORA-22922: nonexistent LOB value". WHere do my error comes from ? I am fairly new in this stuff of BLOB.
    Below my procedure.
    Thank for your kind help.
    create or replace
    procedure insert_img as
    f_lob bfile;
    b_lob blob;
    loops number default 0 ;
    lines number default 0;
    stmt varchar2(4000);
    cursor c1 is select img_blob, file_name, pk from photos FOR UPDATE ;
    stmt := 'SELECT COUNT(*) FROM PHOTOS';
    for ligne in c1 loop
    exit when loops >= lines ;
    loops := loops+1;
    update photos set img_blob= empty_blob() where CURRENT OF C1;
    -- return img_blob into b_lob;
    b_lob := ligne.img_blob ;
    f_lob := bfilename( 'MY_FILES', ligne.file_name );
    IF (DBMS_LOB.FILEEXISTS(f_lob) != 0)
          DBMS_OUTPUT.PUT_LINE('BFILE exist: '|| ligne.file_name || ', ligne :'||;
          dbms_lob.fileopen(f_lob, dbms_lob.file_readonly);
          dbms_lob.loadfromfile( b_lob, f_lob, dbms_lob.getlength(f_lob) );
          dbms_output.put_line(' :' || || ', lines : ' || lines || ', loops ' || loops);
        DBMS_OUTPUT.PUT_LINE('BFILE does not exist: '|| ligne.file_name || ', ligne :'||;
      END IF;
    end loop;
    end insert_img;

  • Image Processing Cells Manipulation

    Hi Guys,
    I am working on cells manipulation. Due to the nature of image processing which scans from a top-down-left to right approach, i am unable to fix a index number on the specific cell which I required this information in order to manipulate the cells as my command. The image processing will be running throughout the programme. As attached is the picture of the Imaq count objects i am using. 
    On a side note, just want to ask a biology-related experiment if anyone encounter the same issue before, why is a cell easily stuck onto the surface as this action prevents the cells from being trapped once it get stuck on the surface of the cover slip. 
    Thank you in advance,
    Image Processing.png ‏227 KB

    yes I understand your problem. But it seems to me that the scan direction has no effect on this... What if the scan direction was from bottom-up, left-to right and the cell flows in from the left bottom corner? You would have the same problem...
    Or do new cells flow into FOV of the camera only from top-left corner? Could you count the number of objects and linearly increment the indexes of your cells? For example, the first cell that comes into the FOV of the camera has index 0, and when the next cell is introduced, the first cell will have an incremented index that equals 1. And so on...
    But if the new cells come into the FOV of the camera randomly from left, right, bottom, top, etc... it would be more difficult. What you could do is calculate some parameters (check particle measurements in NI Vision Concepts)  for the cell you want to manipulate (at the time when you are sure this is the correct cell) and then compare these parameters with the cells on every subsequent frame. You can build a feature vector of these parameters and use classification tools. When you classify the cell, then you would have no problems manipulating it.
    If your cell changes shape dynamically, then I do not see a way to do this.
    Best regards,
    "Kudos: Users may give one another Kudos on the forums for posts that they found particularly helpful or insightful."

  • Image Processing in Flex

    Hi, I am new in FLex , Is there any can help me in image
    processing . Can some one tell me about How to change image through
    flex and action script ?
    e.g sharpness, grayscale, resize, save, rgb, brightness, crop
    Thanks in advance

    I'm not aware of an image library that lets you do all of
    these out of the box, but you can do many of these things using the
    ColorMatrixFilter in Flex.
    For examples, see the following links: ml
    Hope that helps,

  • Image processing algorithms on video frames.

    I am trying to access video frames, one by one, and do image processing on each of them. this practically includes just a comparison of successive video frames to see how much the content is changing so as to detect when the scenes in the video are changing. i am already using a variation of the frame access code by java. i am able to retrieve the individual frames in the 'buffer' format, and i can convert it to .png and save them to hdisk too.
    what i need to know is whether i can use the buffer type itself to do pixel comparisons, or i need to convert it to an image first. any1 with experience in image processing in java will probably have an idea. and if u can suggest a package, or code whatsoever available online which can help me in my image processing demands, i would really appreciate that.

    Hi Greyfox,
    You can calculate a checksum on the bytes in a bufferedImage and keep a hold of it and use it to check against the next image like so:
              raster = buffImg.getWritableTile(buffImg.getWidth(), buffImg.getHeight());
              imgBytes = ((DataBufferByte)raster.getDataBuffer()).getData();
              // Compute CRC-32 checksum           
         checksumEngine.update(imgBytes, 0, imgBytes.length);
         long checksum = checksumEngine.getValue();
         // Check if it's the same as the previous checksum.
         if (checksum == previousImageChecksum)
              isFrozen = true;
              // Do some logging to try and find out why the image is frozen.
              log.debug("--------- ALERT : DUPLICATE IMAGES FOUND ---------");
              log.debug("Checksum comparison. Current = " + checksum + ". Previous = " + previousImageChecksum);           
              // Give the previous checksum the current value so we can use it for the next check.
              previousImageChecksum = checksum;
         catch (Exception e)
              log.error("Error calculating the checksum.", e);
         // The checksum engine can be reused again for a different byte array by calling reset()

Maybe you are looking for

  • SQL Report Region

    Hi, I am using apex 4.0.1 and I have a page with several SQL Report regions. The user can edit the data in the report regions by clicking a column that uses a href link to open a DML page in a modal window. The user can then amend some data in the mo

  • Material Status field in Material master

    Hi, This is regarding Material Master. Where can I find field Material Status (MARA-PSTAT) in Material Master?? regards, Rc

  • Packet loss higher than 100% in SQL Reporting

    One of our customers is having network problems and packet loss in their network - according to Lync. The network guys claim these values are unrealistic and there've been no dropped packets on their WAN network. On the other side, I'm looking at a C

  • Regarding Number of MAIN Windows in SAP Script.

    Hi, SAP Script allows to place a maximum of 99 MAIN Windows. Is it possible to have different content in different MAIN Windows i.e., if i have 2 MAIN Windows in SAP Script with numbers 00 and 01 can i have different contents in these two windows. If

  • FTP on OS X Server Unreliable

    Hi, I'm running OS X server 2.2.2 on OS X 10.8.5 on a Mac Pro (Mid 2012).  Everything works well, except for the FTP service.  It's very unreliable.  It fails to transfer almost all of the time with more than one or two files (so the only way to get