• 締切済み

BufferedImageをbyte[]に変換ってできますか?

画像データを保持しているBufferedImageオブジェクト から、その内容をbyte[]で取得する方法はあるので しょうか? また、Image⇒byte[]も可能でしょうか?

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

PixelGrabberを使ってint[]にピクセルの色データを取り出した後に3色に分解して byteに変換でしょうか? でも、javaのbyte型は-127~127で、unsignedという概念は無いようなので、 byte型にする意味はあるのでしょうか? コンストラクタ PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int off, int scansize) 例文 PixelGrabber pg=new PixelGrabber(image,0,0,width,height,pix,0,width); try { pg.grabPixels(); int red = 0xff & (pix[0]>>16); int green = 0xff & (pix[0]>>8); int blue = 0xff & (pix[0] ); } catch(InterruptedException e) {System.out.println("エラー");}

madeInHeaven
質問者

補足

すいません。質問内容を微妙に変更します。 new BufferedImage( int width, int height, TYPE_INT_RGB) でBufferedImageインスタンスを作成した場合、 そのimageTypeを「TYPE_3BYTE_RGB」に変更する 方法はあるのでしょうか?

関連するQ&A

  • byte[]からBufferedImageを生成

    初めまして、よろしくお願いします。 画像データがbyte[]に格納されています。 この画像データ(byte[])からBufferedImageを生成したいのですが どうしたらよろしいでしょうか? byte[]、BufferedImageで検索してみましたが、 ずばりこれというものは見つかりませんでした。 よろしくお願いします。

    • ベストアンサー
    • Java
  • byte配列をImageに変換する

    現在Javaでネットワーク越しに画像データを送るプログラムを書いているのですが、byte配列に変換した画像データを、元の画像データに戻せなくて困っています。 もう少しプログラムよりにかくと、BufferdImageをbyte[]には変換できますが、逆ができません。 何かよい方法はないのでしょうか?お返事お待ちしております。

    • ベストアンサー
    • Java
  • 画像のbyte[]データの読み込みついて

    Javaのbyte[]の読み込みについて質問です。 外国産の外部APIのメッソドで次のようにあります。 public void transferImage(byte[] fileByteArray, java.lang.String ImageName,) Parameters: fileByteArray - byte array consisting of image data ImageName - name of the image 例)「test.jpg」という画像データを用意しまた。 ImageName="test.jpg"; と指定出来ました。 fileByteArray=null; としか値を入れれません。 質問) テキストファイルの出力なら一行単位で読み込めますが、画像の時はどのようにデータを取得すればいいのですか? nullの代わりに何を代入したらよいのか教えて下さい。

    • ベストアンサー
    • Java
  • 画像データ(byte[])を半分にする方法

    お疲れ様です、 画像を扱っているのですが、アップロードした画像を 半分に縮小したいのです。 画像データ(byte[])を使用して半分の大きさの(byte[]) を取得する方法をご存知の方よろしくお願いします。 参考になりそうなサイト等探しているのですが、なかなか 見つかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • int配列をbyte配列に変換

    MIDPアプリを作成している初心者です。 Image データを一旦端末のレコードストアに保存しておく為、 getRGB()で取得したint配列を、byte配列に変換しなくてはいけません。 ↓のように レコードストアに書き込むメソッドを書いてみました。 public void writeRecordStore( String name, Image image ) {     int width = image.getWidth();     int height = image.getHeight();     int[] pxData = new int[ width*height ];     byte[] byteData;     RecordStore rs = null;     try {         //画像をバイトデータに変換         image.getRGB( pxData, 0, width, 0, 0, width, height );         //レコードストアを開く         rs = RecordStore.openRecordStore( name, true );         //バイト配列に変換 ← ここがわからない                  //レコードの追加         rs.addRecord( byteData, 0, byteData.length );              } catch( Exception e ) {     } } int配列をbyte配列に変換する方法わかる方 ご教授の程お願いします。 また、まだコーディングに自信が無いので、文法のミスもご指摘頂けたらありがたいです。

    • ベストアンサー
    • Java
  • imageからbyteの変換方法

    画像ファイル(jpgやbmp)からByte配列に格納する事は可能なのですが image型をbyte型に格納する方法が解りません。 ファイルのときはFileStreamとBinaryReaderを使用して BinaryReader.ReadBytesで行っていたのですが 同じような間隔で変換する事は可能なのでしょうか? ご教授お願いいたします。 プログラムはVB 2005を使用しております。

  • BYTEについて―

    BYTEについて― わからない事がいろいろと有るのですが、 【1.データの受渡しについて。】 LPBYTE型に入っている32bitのBMP画像(pixel)を BYTE*型(pbyte)に代入する場合 pbyte = (BYTE*)pixel; このコードで問題ないのでしょうか? また、用意した受け皿のサイズを超えたデータを入れた場合、 配列の末尾に\0が入って残りは切り捨てられているのでしょうか? そして、これは正常に動作するやり方なのでしょうか? 【2.LPとは?】 LPBYTEはBYTEのポインタ型と聞きますが、 BYTE*とどう用法が違うのでしょうか?(LPシリーズ全般の疑問ですが) また、LPBYTEもやはり、末尾に\0が入って管理されているのでしょうか? 【3.宣言・定義・使い方について。】 現在、 BYTE* pbyte = new BYTE[10240]; 等と書いてBYTE配列を作っているのですが、 これは宣言と同時に定義している事になるのでしょうか? そして、newしている以上、手動でdeleteしなければならないのですよね? また、これ以外の定義方法も有るのでしょうか? 質問が多岐に渡っていてすいません、 どうも普通の配列と混同しているのか、 頭の中で疑問がグルグル回ってしまっていまして; よろしくお願いします。 っ;_ _)っ

  • Oracle BLOB→Byte→.tif の変換

    こんばんわ。 タイトル通り、OracleのBLOB型の画像データをjavaのByte型に変換し、それをtiffファイルに変換したいのですが、Javaを始めたばかりで調べてもわかりませんでした。みなさんのお力をお借りしたいのですが・・・。 とりあえず、以下のソースでBLOB型のデータを取得し、byte型に変換まではできたのですが、これからこのバイトデータを.tifファイルへと変換するのがどうしてもわかりません。 ご回答お願いいたします。 ---------------------------------------------------------------- public class Image{ private byte[] imgData; public Blobconvert() { } public Blobconvert(byte[] image) { this.imgData = imgData; } public Blobconvert(InputStream imgData) throws IOException { byte[] buf = new byte[4096]; ByteArrayOutputStream bos = new ByteArrayOutputStream); while (true) {    int len = imgData.read(buf); if (len == -1) break; bos.write(buf, 0, len); } this.imgData = bos.toByteArray(); bos.close(); } public Blobconvert(Blob imgData) throws SQLException, IOException { this(imgData.getBinaryStream()); } } ---------------------------------------------------------------- Blob blbImage = rs.getBlob("SendFile");//SQL文の結果 Blobconvert listModel = null;          if (blbImage != null) listModel = new Blobconvert(blbImage); else listModel = new Blobconvert(); ----------------------------------------------------------------

  • Byteについて

    おはようございます。お世話になっています。 基本データ型の値をコンストラクタによってカプセル化する際に、intであれば値をそのまま、longであればLをサフィックスとして付けて記述するのですが、byteはどのようにすれば良いのでしょうか?色々試した結果、キャスト演算子を使って(byte)12のようにするとbyte型として認識してくれました。これ以外に何か数値をbyte型にする方法は有るのでしょうか?よろしくお願いします。

    • ベストアンサー
    • Java
  • byte[2] から int へ。

    それぞれintの下位2バイトのビット列保持するbyte型配列の要素2つを int 形の整数に治したいのですがいい方法が思いつきません。例えば、 byte[0] = 0x01; byte[1] = 0x01; ならば、 00000000 00000000 00000001 00000001 で、256 + 1 = 257 byte[0] = 0x02; byte[1] = 0x10; ならば、 00000000 00000000 00000010 0000011 で、512+3 = 515 です。byteの値が0~127の場合は int n = byte[0] << 8 n = n | byte[1] という感じでいけそうなのですが、byte[0]が 0xFF のような負の値のときにint とのビット演算(もしくはシフト演算)で上位2バイト分も補数表記のためか全部1で埋まってしまい、上の方法はだめみたいです。 byte[0] = 0x01; byte[1] = 0xFF; のときは、 00000000 00000000 00000001 11111111 で、256+255 = 511 としたいのですが、場合わけをせずに求める よい方法はないでしょうか。

    • ベストアンサー
    • Java

専門家に質問してみよう