Categories
discuss

Colorizing images in Java

I’m working on some code to colorize an image in Java. Basically what I’d like to do is something along the lines of GIMP’s colorize command, so that if I have a BufferedImage and a Color, I can colorize the Image with the given color. Anyone got any ideas? My current best guess at doing something like this is to get the rgb value of each pixel in the BufferedImage and add the RGB value of the Color to it with some scaling factor.

Answer

I have never used GIMP’s colorize command. However, if your getting the RGB value of each pixel and adding RGB value to it you should really use a LookupOp. Here is some code that I wrote to apply a BufferedImageOp to a BufferedImage.

Using Nicks example from above heres how I would do it.

Let Y = 0.3*R + 0.59*G + 0.11*B for each pixel

(R1,G1,B1) is what you are colorizing with

protected LookupOp createColorizeOp(short R1, short G1, short B1) {
    short[] alpha = new short[256];
    short[] red = new short[256];
    short[] green = new short[256];
    short[] blue = new short[256];

    int Y = 0.3*R + 0.59*G + 0.11*B

    for (short i = 0; i < 256; i++) {
        alpha[i] = i;
        red[i] = (R1 + i*.3)/2;
        green[i] = (G1 + i*.59)/2;
        blue[i] = (B1 + i*.11)/2;
    }

    short[][] data = new short[][] {
            red, green, blue, alpha
    };

    LookupTable lookupTable = new ShortLookupTable(0, data);
    return new LookupOp(lookupTable, null);
}

It creates a BufferedImageOp that will mask out each color if the mask boolean is true.

Its simple to call too.

BufferedImageOp colorizeFilter = createColorizeOp(R1, G1, B1);
BufferedImage targetImage = colorizeFilter.filter(sourceImage, null);

If this is not what your looking for I suggest you look more into BufferedImageOp’s.

This is would also be more efficient since you would not need to do the calculations multiple times on different images. Or do the calculations over again on different BufferedImages as long as the R1,G1,B1 values don’t change.

Categories
discuss

Are there any alternatives to Gigaspaces? [closed]

Anything thats as good and as stable and as feature-rich as gigaspaces?

Answer

Gigaspaces is top notch as far as a Javaspaces implementation goes for scalability and performance. Are you restricted to a Javaspaces implementation? Blitz Javaspaces is top notch for a free product.

Categories
discuss

What’s the purpose (if any) of “javascript:” in event handler tags?

I’ve been making a concerted effort to improve my javascript skills lately by reading as much javascript code as I can. In doing this I’ve sometimes seen the javascript: prefix appended to the front of event handler attributes in HTML element tags. What’s the purpose of this prefix? Basically, is there any appreciable difference between:

onchange="javascript: myFunction(this)"

and

onchange="myFunction(this)"

?

Answer

Probably nothing in your example. My understanding is that javascript: is for anchor tags (in place of an actual href). You’d use it so that your script can execute when the user clicks the link, but without initiating a navigation back to the page (which a blank href coupled with an onclick will do).

For example:

<a href="javascript:someFunction();">Blah</a>

Rather than:

<a href="" onclick="someFunction();">Blah</a>
Categories
discuss

Best method to parse various custom XML documents in Java

What is the best method to parse multiple, discrete, custom XML documents with Java?

Answer

I would use Stax to parse XML, it’s fast and easy to use. I’ve been using it on my last project to parse XML files up to 24MB. There’s a nice introduction on java.net, which tells you everything you need to know to get started.

Categories
discuss

Adobe AIR: Handling JSON objects from server

I have a script that retrieves objects from a remote server through an Ajax call. The server returns objects in JSON notation.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

However, in Adobe AIR, there is a restriction on using eval() for security reasons. So I’m able to get replies from the remote server, but can’t turn them back into JavaScript objects. Is there any workaround for this issue? I would like to use JSON for my JavaScript objects, since it can be used almost immediately.

Side-note : I do understand the security implications for forcing the issue, but I will be doing some rapid application development for a competition, so the program would only be a quick prototype, and not used for production purposes. Nevertheless, it would be great if there’s a better alternative to what I’m trying to do now


Update:

Thanks to Theo and jsight for their answers;

One important thing I learnt today is that I can actually make use of ActionScript libraries by using the

<script src="lib/myClasses.swf" type="application/x-shockwave-flash"></script>

tag extended by Adobe AIR. Check out Theo’s link for more details!

Answer

You can find a JSON parser written in JavaScript here (source code here). You can also use the as3corelib JSON parser from JavaScript, there’s a description of how to access ActionScript libraries from JavaScript here.

Source: stackoverflow
Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may apply. By using this site, you agree to the Privacy Policy, and Copyright Policy. Content is available under CC BY-SA 3.0 unless otherwise noted. The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 © No Copyrights, All Questions are retrived from public domain..