2008/3/20 木曜日 by kouichi
ImageIO#writeを使うといろいろなフォーマットへ画像を出力することができますが、JPEGを扱うときには注意が必要です。
メソッドに渡すパラメータは
public static boolean write(RenderedImage im,
String formatName,
File output or OutputStream output or ImageOutputStream output)
imはイメージバッファ、formatNameは出力フォーマット、最後は出力先です。
imにはBufferedImageに読み込んだものを渡しますが、
BufferedImage im = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = im.createGraphics();
Image img = bi.getScaledInstance(width, height, Image.SCALE_SMOOTH);
g.drawImage(img,0,0,width,height,null);
g.dispose();
などとしてBufferedImageをImageIOに渡しますが、JPEGフォーマットだとこれではNGです。
どこがNGかというとBufferedImage.TYPE_INT_ARGBの部分で、JPEGは透過には対応していないので、Alphaを読み込んでしまうと、出力時に問題が起こるようです。
この場合、ExceptionはThrowされずに出力されたJPEGのデータがおかしくなります。
BufferedImage.TYPE_INT_ARGB
は
BufferedImage.TYPE_INT_RGB
としてAlpha値を読まないようにしてしまえば問題なく出力されます。
PNGやGIFのようにAlphaを持つフォーマットからJPEGに変換するとき遭遇したので書いておきます。
Posted in Java | No Comments
2008/3/16 日曜日 by kouichi
以前HttpClientのタイムアウトについて書いたのですが、ちょっと不十分だと思ったので補足です。
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(3000); // タイムアウトmsec
HttpConnectionManager manager = new SimpleHttpConnectionManager();
manager.setParams(params);
HttpClient client = new HttpClient(manager);
GetMethod method = new GetMethod(url);
client.executeMethod(method);
だと、Connectionのタイムアウトは設定できるのですが、つながった後に時間がかかる場合などタイムアウトしてくれません。
URLConnectionと同じようにソケットのタイムアウトを指定すればOKです。
HttpConnectionManagerParams params = new HttpConnectionManagerParams();
params.setConnectionTimeout(3000); // コネクションタイムアウトmsec
params.setSoTimeout(1000); // ソケットタイムアウトmsec
HttpConnectionManager manager = new SimpleHttpConnectionManager();
manager.setParams(params);
HttpClient client = new HttpClient(manager);
GetMethod method = new GetMethod(url);
client.executeMethod(method);
で、1秒でタイムアウトします。
タイムアウトした場合はSocketTimeoutExceptionをThrowしてくれます。
Exception in thread "main" java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
Posted in Java | 1 Comment
2008/3/15 土曜日 by kouichi
こんなのを。
以下引用—-
プログラミングにおける、「ランナーズ・ハイ」の状態のこと。他に「フロー」や「ゾーンに入る」などと言われることもある。
この状態になると、以下のような感覚を得ることができる。
* 疲れを感じない
* 眠気を感じない
* 頭がクリアーになる
* 扱っているソースが全て頭に入る感じ
* 食べなくても平気
* トイレに行かなくても平気
* 時間の感覚がなくなる
プログラミング速度は上がるが、品質は保証できない。
わかる気がします。
特に最後の一文。
Posted in その他 | No Comments