2012年3月4日日曜日

Java.awt.Image を BufferedImage や Byte 配列に変換する方法

java.awt.Image を BufferedImage や byte 配列に変換する方法

Java ImageIO で Flickr 並みのサムネイル画像をつくるという記事で、

java.awt.Image を BufferedImage や byte 配列に変換する方法は次回。

と書いたにも関わらず、そのまま放置になっていた(コメントで指摘されているのに気づいたのも今日だ。すまん)。

概要

まずは java.awt.image.BufferedImagebyte 配列に変換する方法を紹介する。

そのあと、java.awt.Imagejava.awt.image.BufferedImage に変換する方法を紹介するので、このふたつを組み合わせれば、

Image --> BufferedImage --> byte[] 

が実現できるわけだ。

BufferedImage を byte[] に変換する

BufferedImage から byte 配列の変換は、javax.imageio.ImageWriter でわりかし素直に実装できる。


MicrosoftのFrontPage 2003でホームページを作る方法
BufferedImage image = ...; ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); ImageWriter writer = ImageIOKit.getImageWritersByFormatName(formatName); ImageOutputStream stream = ImageIO.createImageOutputStream(bytesOut);  try {   writer.setOutput(stream);   writer.write(image);   stream.flush(); } finally {   writer.dispose();   if (stream != null) try { stream.
どのように私はPICのURLを取得するにはclose(); } catch (Throwable t) {;} } byte[] bytes = bytesOut.toByteArray(); ...

ImageWriteParam も組み合わせれば、圧縮率などの設定ができる。

Image を BufferedImage をに変換する

一筋縄ではいかないのが、Image を BufferedImage をに変換する方法だ。

以下では、image 変数が java.awt.Image のインスタンスであるとして、順を追って説明する。

まず、imageBufferedImage のインスタンスなら、以降は何もする必要がない。

if (image instanceof BufferedImage) {   ... } 

次に、java.awt.Image のインスタンスは、実際のデータが非同期でロードされているかもしれないので、変換処理を行う前に、java.awt.MediaTracker でロードが完了するまで待機する。


誰がアニメーター開始
// java.awt.MediaTracker でロードを待機 MediaTracker tracker = new MediaTracker(new Component(){}); tracker.addImage(image, 0); tracker.waitForAll(); 

ここからが実際の変換処理になるが、基本的に、

  1. 新規に BufferedImage を生成
  2. 生成した BufferedImageImage のピクセルをコピー

という処理になる。


PixelGrabber pixelGrabber = new PixelGrabber(image, 0, 0, -1, -1, false); pixelGrabber.grabPixels(); ColorModel cm = pixelGrabber.getColorModel();  final int w = pixelGrabber.getWidth(); final int h = pixelGrabber.getHeight(); WritableRaster raster = cm.createCompatibleWritableRaster(w, h); BufferedImage renderedImage =   new BufferedImage(     cm,     raster,     cm.
isAlphaPremultiplied(), new Hashtable()); renderedImage.getRaster().setDataElements(0, 0, w, h, pixelGrabber.getPixels());

上記のコードでは、元の ColorModel もサポートするために、PixelGrabber を使っている。

あとは、ここで生成した BufferedImagebyte 配列に変換してやればよい。



These are our most popular posts:

投稿サムネイルを使う方法

WordPressで投稿サムネイルを使う方法です。,投稿サムネイルはバージョン2.9で導入 されたテーマ機能です。サムネイルは、投稿、 ... Thumbnail is an image that is chosen as the representative image for Posts, Pages or Custom Post Types. The display of this ... 注:特定の投稿タイプのみ投稿サムネイルを有効にする場合は、 add theme support()を参照してください。 .... 2011/2/24 木曜日 PM 14:25:13 | コメントRSS ... read more

Voice API mixi Developer Center (ミクシィ デベロッパーセンター)

2007年4月3日 ... Java ImageIO で Flickr 並みのサムネイル画像をつくるという記事で、. java.awt.Image を BufferedImage や byte 配列に変換する方法は次回。 と書いたにも関わらず、 そのまま放置になっていた(コメントで指摘されているのに気づいたのも ... read more

java.awt.Image を BufferedImage や byte 配列に変換する方法 ...

2011年7月19日 ... facebookのfriends photosにコメントする方法. 著者:ぱんな ... コメントは公開表示され るので、写真を見た他の人にもコメントが表示されるので、コメントする時は、見られても 良い内容にしましょう。自分の写真 ... ログインしてコメントを投稿する ... read more

YouTube へのコメント - YouTube ヘルプ

YouTube 動画だけでなく、YouTube ユーザー チャンネルにもコメントを残すことができ ます。コメントに関する以下のトピックをクリックして、表示される説明をご覧ください。 動画へのコメントテキスト コメント動画にテキスト コメントを投稿する方法は次のとおり です: ... read more

Related Posts



0 コメント:

コメントを投稿