Image Processing without AWT

Hi everyone,
Are there any libraries out there for image processing on J2ME devices? The device I am working on is JStamp, so it has not UI. Therefore no AWT. All image processing libraries seem to be based on AWT.
When I try to upload Java classes using AWT, JStamp upload gives error, because there are native JNI methods in AWT.
Thanks,

Hi,
I'm not quite sure what you are asking. What "image processing" could you possibly do on a system without a GUI? If you just mean storing or tranporting image files then you can treat it in the same way as any other data. If the system has no graphical ability then you obviously will not be able to display images (although I have seen an app once that converted a GIF into an ASCII art text file...)
Please be more specific.
Ben

Similar Messages

  • 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

    Billy,
    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.
    Christian.
    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 ;
    begin
    NULL;
    dbms_output.enable(900000);
    stmt := 'SELECT COUNT(*) FROM PHOTOS';
    EXECUTE IMMEDIATE stmt INTO LINES ;
    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)
    THEN
          DBMS_OUTPUT.PUT_LINE('BFILE exist: '|| ligne.file_name || ', ligne :'|| ligne.pk);
          dbms_lob.fileopen(f_lob, dbms_lob.file_readonly);
          dbms_lob.loadfromfile( b_lob, f_lob, dbms_lob.getlength(f_lob) );
          dbms_lob.fileclose(f_lob);
          dbms_output.put_line('ligne.pk :' || ligne.pk || ', lines : ' || lines || ', loops ' || loops);
      ELSE
        DBMS_OUTPUT.PUT_LINE('BFILE does not exist: '|| ligne.file_name || ', ligne :'|| ligne.pk);
      END IF;
    end loop;
    commit;
    end insert_img;

  • Creating Thumbnails of Images without AWT

    I've searched in a lot of places, and am becoming increasingly surprised I cannot find a straightforward answer to a problem I have. I run Tomcat on a server which has no X11, and I do not want to install it. However, I am also trying to create a servlet which will take an image from a byte array and create a thumbnail of it.
    While I have seen many examples of this, all use AWT, which seems to require using X11 or some windowing system even to run at all (despite my not trying to create a window or anything). While I understand that there is an option that can be added to the initialization script for Tomcat ("JAVA_OPTS=-Djava.awt.headless=true") I would far prefer simple code that didn't use AWT at all.
    Does anyone know how to create a thumbnail or resize an image without the use of the AWT library whatsoever? Thanks very much!

    Hmm... sorry I didn't know that.
    I remember seeing some section on this website about Java Imaging or something like that and it seemed totally independent of AWT.
    I came accross another imaging article:
    http://johnbokma.com/java/obtaining-image-metadata.html , this one doesn't seem to use AWT - at least I don't see any in the imports.
    May be Images are supposed to work only with AWT.
    Here's another set of examples:
    http://www.exampledepot.com/egs/javax.imageio/pkg.html
    that demonstrates the javax.imageio package, but those examples also use AWT.
    I think one could re-size an image on a website to create thumbnails, by specifying a percent width and height. and may be there's no need to have a package to create thumbnails on a web page when it could be done with HTML and that's probably why there isn't image processing for web pages (this is just my guess work, I could be wrong)
    Message was edited by:
    appy77

  • 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();
         pb.addSource(origImg);
         pb.add(scaleX);
         pb.add(scaleY);
         pb.add(0.0f);
         pb.add(0.0f);
         pb.add(Interpolation.getInstance(Interpolation.INTERP_BILINEAR));
         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.
    Thanks,
    Anurag
    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.
    matfud

  • IMAGE PROCESSING THROUGH DLL WRITTEN IN C++

    Hello,,,
    actually i am writing a program for image processing in c++ and try to make a DLL . My idea is to use labview for acquiring and displaying the images and use c++ for calculation because i think if i use dll the time will be shorter than using labview VI's... i succeed in obtaining results,,, but the processing time became longer than using labview VI's for processing.... This problem occurs from using the image 2d array in the following style:
    for (j = 0; j < row; j++)
       for (i = 0; i < col; i++)
                       A[j*col + i] = a[j*col + i];
    because of the consideration of memory allocation....
    My question is: how can i use the image 2d array as same in c++.... I mean how to write it in this form A[j][ i] using pointer without make confusing labview memory...
    thanks,,,

    thanks Andrey,, i use 2d array because after several image processing steps ,,, such like stretching i will obtain paricle ( see the attached image).... in my opinion is : i can track those edges if  i apply some tracking algorithm,,,, like this
    if (nb[(j * col) + i]==0)
                for (int j= 1; j< row-1; j++ )
                             for (int i = 1 ; i < col-1; i++ )
                                        ip = (j*col)+i+1;
                                        im = (j*col)+i-1;
                                        jp = (j*col)+i+col;
                                         jm = (j*col)+i-col;
    so i can search in side the image for the location of the edges....
    so sir if there is some way to write the image like 2d array this will be helpful... usually i have something wrong when write the image like this : image [ j ] [ i ],,,,,,, i am keeping searching for a solution during the last two months,,,
    but nothing changed... i have to keep trying and trying... 
    ( sir, iam student and this is not my option,,,, just i have to do it like 2d array )
    thanks for alllllll
    Attachments:
    1.png ‏2 KB

  • Image processing - OutOfMemoryError

    Hi,
    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>(Picture.java:56)
            at pr.docs.DocCAN.<init>(DocCAN.java:24)
            at canvas01.DocHandler.createNewDoc(DocHandler.java:33)
            at canvas01.CanvasGUI.actionPerformed(CanvasGUI.java:309)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
            at javax.swing.AbstractButton.doClick(AbstractButton.java:389)
            at javax.swing.AbstractButton.doClick(AbstractButton.java:337)
            at javax.swing.plaf.basic.BasicMenuItemUI$Actions.actionPerformed(BasicMenuItemUI.java:778)
            at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1645)
            at javax.swing.JComponent.processKeyBinding(JComponent.java:2851)
            at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:670)
            at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
            at javax.swing.JMenuBar.processBindingForKeyStrokeRecursive(JMenuBar.java:678)
            at javax.swing.JMenuBar.processKeyBinding(JMenuBar.java:649)
            at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
            at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:254)
            at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2928)
            at javax.swing.SwingUtilities.processKeyBindings(SwingUtilities.java:1554)
            at javax.swing.UIManager$2.postProcessKeyEvent(UIManager.java:1454)
            at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722)
            at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990)
            at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855)
            at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676)
            at java.awt.Component.dispatchEventImpl(Component.java:4608)
            at java.awt.Container.dispatchEventImpl(Container.java:2143)
            at java.awt.Window.dispatchEventImpl(Window.java:2478)
            at java.awt.Component.dispatchEvent(Component.java:4566)
            at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:680)
            at java.awt.EventQueue.access$000(EventQueue.java:86)PR.

    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.

  • Image Processing (JAI-API) Instalation problem

    I am developing the software in Image processing (remote sensing). I am facing the following problem when i run the program.
    C:\java_ex>javac SimpleJAITest.java
    SimpleJAITest.java:23: cannot resolve symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    ScrollingImagePanel panel1, panel2;
    ^
    SimpleJAITest.java:36: cannot resolve symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    panel1 = new ScrollingImagePanel(loadImage, 300, 300);
    ^
    SimpleJAITest.java:78: cannot resolve symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    panel2 = new ScrollingImagePanel(outImage, 300, 300);
    ^
    Note: SimpleJAITest.java uses or overrides a deprecated API.
    Note: Recompile with -deprecation for details.
    3 errors
    Please send the information regarding installation of Java Advance Imaging kit
    and link to download JAI API
    Also send the solution of this problem

    C:\java_ex>javac SimpleJAITest.java -Xlint:deprecation
    SimpleJAITest.java:23: cannot find symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    ScrollingImagePanel panel1, panel2;
    ^
    SimpleJAITest.java:29: warning: [deprecation] set(java.lang.Object,java.lang.Str
    ing) in javax.media.jai.ParameterBlockJAI has been deprecated
    loadPB.set(argv[0], "hs");
    ^
    SimpleJAITest.java:36: cannot find symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    panel1 = new ScrollingImagePanel(loadImage, 300, 300);
    ^
    SimpleJAITest.java:39: warning: [deprecation] show() in java.awt.Window has been
    deprecated
    window1.show();
    ^
    SimpleJAITest.java:78: cannot find symbol
    symbol : class ScrollingImagePanel
    location: class SimpleJAITest
    panel2 = new ScrollingImagePanel(outImage, 300, 300);
    ^
    SimpleJAITest.java:81: warning: [deprecation] show() in java.awt.Window has been
    deprecated
    window2.show();
    ^
    SimpleJAITest.java:87: warning: [deprecation] set(java.lang.Object,java.lang.Str
    ing) in javax.media.jai.ParameterBlockJAI has been deprecated
    savePB.set(argv[1], "filename");
    ^
    SimpleJAITest.java:88: warning: [deprecation] set(java.lang.Object,java.lang.Str
    ing) in javax.media.jai.ParameterBlockJAI has been deprecated
    savePB.set(argv[2], "format");
    ^
    3 errors
    5 warnings

  • General Question Regarding Image Processing

    Hi All,
    I need a suggestion regarding image processing and this is the best place to get best advise.
    we need an image processing utility for our web processing.
    requirements are as described below:
    we have a e commerce based application where we need to display product images which we are currently displaying successfully.
    now we have to provide user with image processing functionality like user can zoom image can flip image can rotate image.
    what we want like when user click on zoom we can generate a dynamic image of that region based on a single source of image and can provide zooming functionality.
    more over company requirements is to go for only open source solution [:-)]
    we tried some open source solutions but due to the in house E-Commerce framework constraints we not able to integrate them,.
    can any one point me to any open source java based library so that we can use that to provide solution or do we need some other approach.
    Here is a link for a image zooming example hough this is highly professional solution using Adobe Scene7 but we want to implement something like in image zooming
    [Zoom Demo|http://s7d2.scene7.com/s7ondemand/zoom/flasht_zoom.jsp?company=S7Web&sku=AnthroISwebDemo&config=S7Web/AnthroISwebDemo&zoomwidth=500&zoomheight=500&viewer=/skins/S7Web/SWFs/loaders/genericzoomLfour.swf&vc=codeRoot%3D%2Fis-viewers351%2Fflash%2F]
    any help in this regard will be much appreciated.
    Thanks in advance
    -Umesh

    It is never safe to assume that any allocation was successful, and while it's incredibly unlikely that you're running into any such situation, it's entirely possible for a formal protocol to declare that a given message send should return immediately without waiting around:
    http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ch apter13_section_8.html#//appleref/doc/uid/TP30001163-CH9-BAJIGHAF
    An "impression" doesn't prove much unfortunately, so I'd recommend getting friendly with the debugger to see what's really going on.

  • Help for a beginner creating a 2d image-processing suite in LabVIEW.

    I am a final year student and currently seeking any advice from experienced engineers with regard to my project.
    The project is to create a LabVIEW based image-processing suite, which would be able to import 2d arrays of data from microscope, plus other information (scaling, date/time, sample info) and perform the following functions:
    Visualisation – 2d & 3d, Cross-section Profile Analysis, Histogram, Fourier Transform, Auto-Correlation, Copy, Print, Save & Export, Colour Palette Edit, Zoom, Manipulate.
    Having not used LabView previously, any examples or information you may have would be of extreme use,
    Thank you in advance for any help you can give me,

    Sam,
    Most of these tools are readily available in LabVIEW when you purchase the IMAQ Vision toolkit. You just need to learn how to use them and set them up. In your case, I would strongly recommend starting with Vision Builder. You can learn how to use a number of these tools, and it may actually be sufficient for your project without writing any code. It can generate LabVIEW code as well, so it would get you started on your program.
    Bruce
    Bruce Ammons
    Ammons Engineering

  • Display image in java.awt.List

    hello guys,
    How i can display image in java.awt.List means listbox. give me sample code. if you have
    Waiting for your favorable reply.
    Regards,
    Bhavesh Kharwa

    java.awt.List you can not.
    javax.swing.JLast you can.

  • 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
    get
    return image;
    set
    image = value;
    Invalidate();
    private Image image;
    public Matrix Transform
    get
    return transform;
    set
    transform = value;
    Invalidate();
    private Matrix transform = new Matrix();
    public ColorMatrix ColorMatrix
    get
    return colorMatrix;
    set
    colorMatrix = value;
    Invalidate();
    private ColorMatrix colorMatrix = new ColorMatrix();
    protected override void OnResize( EventArgs e )
    Invalidate();
    public ImageControl()
    this.DoubleBuffered = true;
    protected override void OnPaint( PaintEventArgs e )
    if( image == null ) return;
    e.Graphics.ResetTransform();
    e.Graphics.Transform = transform;
    ImageAttributes imageAttributes = new ImageAttributes();
    imageAttributes.SetColorMatrix(
    colorMatrix,
    ColorMatrixFlag.Default,
    ColorAdjustType.Bitmap );
    e.Graphics.DrawImage(
    image,
    new Rectangle( 0, 0, image.Width, image.Height),
    0, 0, image.Width, image.Height,
    GraphicsUnit.Pixel,
    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

    Hi,
    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

    Sir,
       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.

    Hi,
    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)
    Attachments:
    img recognition.zip ‏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
    Oona

    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 helpful.so,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

Maybe you are looking for