• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:int配列をbyte配列に変換)

int配列をbyte配列に変換する方法とMIDPアプリの作成初心者へのアドバイス

このQ&Aのポイント
  • MIDPアプリを作成している初心者の方へ、int配列をbyte配列に変換する方法と、MIDPアプリの作成に関するアドバイスを紹介します。
  • int配列をbyte配列に変換する方法について、具体的なコード例を挙げてご説明します。
  • また、MIDPアプリを作成する際の文法のミスについても、注意点をまとめました。初心者の方にとって役立つ情報を提供します。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

> intの16~23ビットに赤、8~15ビットに青、0~7ビットに緑が入っている > という理由だそうです。 > これは間違っていると思われますか? 残念ながら、赤・青・緑の24ビットだけでは不完全です。 MIDPのImage.getRGB()は、24~31ビット目に透明度(α値)の情報を入れて返すからです。

brosis
質問者

お礼

お礼遅れまして申し訳ございません。 salsberryさんのご回答、納得しました。 ありがとうございました。

その他の回答 (2)

回答No.2

/** 「レコードストアって何?」っていうレベルなので、 もしかしたら、とんちんかんな回答になっているかも。 */ public class Convert{  int[] pxData;  byte[] byteData;  Convert(){   pxData = new int[] {Integer.MIN_VALUE,             -10,0,10,             Integer.MAX_VALUE};   byteData = new byte[pxData.length];  }  public byte[] convertByte(int[] intArray){   byte[] byteArray = new byte[intArray.length];   for (int i = 0; i < intArray.length; i++) {    if(intArray[i] < Byte.MIN_VALUE){ // -128より下。     byteArray[i] = Byte.MIN_VALUE;    }else if(intArray[i] > Byte.MAX_VALUE){ // 127より上。     byteArray[i] = Byte.MAX_VALUE;    }else{     byteArray[i] = (byte)intArray[i];    }   }   return byteArray;  }  public static void main(String[] args){   Convert c = new Convert();   System.out.println("pxData:");   for (int px : c.pxData) {    System.out.println(px);   }   c.byteData = c.convertByte(c.pxData);   System.out.println("byteData:");   for (byte by : c.byteData) {    System.out.println(by);   }  } }

参考URL:
http://members2.jcom.home.ne.jp/take_1118/java25.html
brosis
質問者

お礼

ご回答ありがとうございます。 しかし今の私にはご教示頂いたコードがすぐに理解できません。 また、ご紹介頂いた参考URLに関しても 今回の質問の主旨とは外れるかと思いました。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

int型は32ビット、byte型は8ビットなので、int型のn要素の配列をbyte型のn*4要素の配列に変換することになります。 byteData = new byte[pxData.length * 4]; for (int i = 0; i < pxData.length; i++) { int x = pxData[i]; byteData[i*4] = (byte)((x >> 24) & 0xFF); byteData[i*4+1] = (byte)((x >> 16) & 0xFF); byteData[i*4+2] = (byte)((x >> 8) & 0xFF); byteData[i*4+3] = (byte)(x & 0xFF); } 確認はしていませんが、大ざっぱにはこんな感じです。

brosis
質問者

お礼

お礼遅れましてすみません。 そしてご回答ありがとうございます。 他のサイトで byteData = new byte[pxData.length * 3]; for (int i = 0; i < pxData.length; i++) { int x = pxData[i]; byteData[i*3] = (byte)((x >> 16) & 0xFF); byteData[i*3+1] = (byte)((x >> 8) & 0xFF); byteData[i*3+2] = (byte)(x & 0xFF); } という意見を頂きましたが、これは間違っていると思われますか?

brosis
質問者

補足

正確に書き直します public void writeRecordStore( String name, Image image ) {     int width = image.getWidth();     int height = image.getHeight();     int[] pxData = new int[ width*height ];     byte[] byteData = new byte[ width*height*3];     RecordStore rs = null;     try {         //画像をイント配列データに変換         image.getRGB( pxData, 0, width, 0, 0, width, height );         //レコードストアを開く         rs = RecordStore.openRecordStore( name, true );         //バイト配列に変換         for(int i=0;i<pxData.length;i++){             byte red=(byte)((pxData[i]>>16) & 0xff);             byte green=(byte)((pxData[i]>>8) & 0xff);             byte blue=(byte)((pxData[i]) & 0xff);             byteData[3*i]=red;             byteData[3*i+1]=green;             byteData[3*i+2]=blue;         }                  //レコードストアに書き込む         rs.addRecord( byteData, 0, byteData.length );              } catch( Exception e ) {     } } intの16~23ビットに赤、8~15ビットに青、0~7ビットに緑が入っている という理由だそうです。

関連するQ&A