So after doing a lot of digging around here, and elsewhere, there is no good, simple, CURRENT way to grab images from iSight in Java. So first of all I would love if someone could point me to a good way to do this, and OpenCV does not work for Java in case you were thinking of that.
Here's a workaround of sorts that I'm thinking about using, even though it is incredibly flawed:
Open up Photo Booth
Use java's Robot class to grab an image of the portion of the screen that holds the feed from the iSight.
If you just need to capture single pictures, you could use a command line program like imagesnap, run it with Runtime.exec, save the picture to a temp directory, then open the image file.
Related
Is there any Java code can help to detect another program GUI part by part?
For example, detect the size of the GUI, detect the location of the button.
Selenium does something similar to this but it is really not there. It will work only for browser-based apps/programs/sites. But if your target programs are browser-based, it will probably be a great tool.
For desktop programs, you might give a look to the createScreenCapture(Rectangle) method from the java.awt.Robot class to get a BufferedImage with the contents of the screen, and then it is up to you to try to make sense of the image, which would not be easy. Also, you might use the Robot to try to juggle out windows as needed, press buttons, type text, or whatever is needed to find out what you want. All of this will be a lot of work.
Is there a library or way to have a live command line that instead of printing out each line works like a graphics library where you can just update one element if it has changed?
Example of usage would be to display current time. Instead of refreshing the cmd and appending more things to it, you just update the current time object and reprint or something.
Yes, there is, although it is not 100% pure Java (despite of what the web page says):
http://code.google.com/p/lanterna/
It works very well and it is easy to use. Development is a bit slow but the developer does answer questions. I recommend checking the Terminal Layer, which is perhaps what you need.
I have a need to be able to programmatically convert a PNG file that has been optimized for an iOS application and remove the optimizations. A number of posts reveal the mechanism for doing this, but I was hoping there was some Java code already out there for doing this before I go do this on my own.
Does anyone know of a Java converter for CgBI images to RGBA?
I got interested on the topic and made some research on the area. On one related page on PNG conversions I ended up to a jar package type of converter which may be something that you'd be pleased of. I suppose it to be some sort of Open Source solution, because the source was announced to be found from the same place.
I wrote a command line C program that does the same. In addition to the other converters (I have yet to test the online one), mine can handle multiple IDAT chunks, Adam7 interlacing, and all row filter types -- the latter is necessary to de-multiply color pixels with their alpha. All of this leads to, AFAIK, the very same image that got fried.
See my website for the full C source code.
Okay, so here's my problem:
We use FOP for creating "pretty" report output. We use the pdf option if the user wants a file, AWT for previewing, and the -print option for printing them. We are using FOP 0.25.x, which I fully recognize is not the newest version, but upgrading to 0.95 appears to be a non-trivial task that I don't necessarily want to undertake.
Anyway, it was noticed by one of our users that when printing ID cards (generated via FOP -print option) to the id card printer, the images on the cards (pictures of the employees) had some corruption in them...sort of like like green and reds dots and lines. We also discovered that if we sent the exact same print request to one of our HP color laserjets, it printed fine. To add to the strangeness, if we use FOP to create a PDF of the ID card and then print it via acrobat reader on the card printer, it prints fine.
I eventually discovered that it had something to do with the scaling of the images...we were scaling 600px high images down to something like 120px. If I presized the images down, even just halfing them, the corruption went down noticeably. Similarly, when I upsized the images, the corruption went up.
So my question: anybody have ANY idea what is going on here? Or has ever run into such a thing?
Since I don't know why this is happening, I don't know how to fix the root cause, but I've been working through some various workarounds:
1) Use FOP to create a pdf of the image and then print that via Java. This seems like an obvious answer, but some Googling around showed that printing a PDF via Java is not trivial. I've seen the PDF Renderer project on java.net, but seems pretty bulky for a single very specific application.
2) Try to resize the images before giving it to FOP. This also seemed pretty straightforward, however our various users can setup stylesheets for these id cards however they want and using "pt" and "in" sizing in them seems to be pretty common...I don't know of any good way to map that to a pixel resizing.
If anybody has any insight into the root cause, ways to make these work arounds work, and/or another idea, you'd be in my debt.
Most certain explanation:
image corruption? it's a bug.
Why not use 0.95? Sooner or later you have to upgrade, Apache consortium won't
fix bugs in 0.25.x versions.
You can't hope to find workarounds for every bugs which might occur in future.
I ended up doing the second thing I mention in the original question...i.e. resizing it before giving it to FOP. I found that I could retrieve the dpi of the printer I was printing to and do some math on it to get pixel sizing. Seems to work perfectly in all my testing...not a real solution but an adequate workaround.
I am trying to make an application in which one component captures the screen of the user (for screen casting). I am aware that there are two options to achieve the same using a Java applet (please correct me if I am wrong). First is to use the java applet to take screen shots continuously and convert it into a video and upload it as a video file. And second is to create a java vnc server and record it as a .fbs file and play it using a player like: http://www.wizhelp.com/flashlight-vnc/index.html
I would like to know the best solution in terms of video quality, file size, cross-platform compatibility (windows and mac), firewall problems and finally ease of implementation.
I am very new to Java. Please tell me whats the best solution for my problem. Also, is it easy enough for me to program it on my own or should I get it developed via a freelancer. I have tons of programming experience (5+ years in LAMP) but none in Java.
Thank you very much.
I agree that this is pretty hard. I implemented those two solutions (VNC and onboard screen capture) plus a third (capture from an external VGA source via an Epiphan grabber) for a former employer. I had the best bandwidth-to-quality ratio with VNC, but I got higher framerate with VGA capture. In all three cases, I reduced the frames + capture times to PNGs and sequenced them in a QuickTime reference movie. Then I made flattened video (MPEG4 or SWF) of the results. In my case, I then synchronized the screen video with a DV stream.
In the end the technology worked (see a sample of the output) but our business model failed.
From what I know, the older versions of applet had security restrictions that may not allow for screen capture. Instead, a java application may be feasible.
Regarding the build-it-yourself vs the fire-a-coder, it depends on how you value your time compared to what you can find on a freelancer site.
I think you can find someone from India/Romania/Poland/Other countries that can make it for an affordable price
Given your Java knowledge and the difficulty of the task, have you considered taking an alternative approach? For example, how about a native VNC server for the end-user, which is just a small download and then they click "Run." And that native server is programmed to capture the screen and send it straight to your web server, which has a client like vnc2swf or other means of converting the VNC stream to a video or .fbs file? Does all that make sense?
Admittedly, without Java, you have to prepare one executable program per platform you want to support, however, I don't know. That still sounds easier to me. Consider Copilot.com. They are doing VNC but they still use small native apps for each platform.
Sorry but this seems the kind of job that requires a lot of experience. Even if you find code snippets all around the net to fix this and that, the overall result may be way worse than simply hiring an experienced Java programmer.