- ベストアンサー
int配列をbyte配列に変換する方法とMIDPアプリの作成初心者へのアドバイス
- MIDPアプリを作成している初心者の方へ、int配列をbyte配列に変換する方法と、MIDPアプリの作成に関するアドバイスを紹介します。
- int配列をbyte配列に変換する方法について、具体的なコード例を挙げてご説明します。
- また、MIDPアプリを作成する際の文法のミスについても、注意点をまとめました。初心者の方にとって役立つ情報を提供します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> intの16~23ビットに赤、8~15ビットに青、0~7ビットに緑が入っている > という理由だそうです。 > これは間違っていると思われますか? 残念ながら、赤・青・緑の24ビットだけでは不完全です。 MIDPのImage.getRGB()は、24~31ビット目に透明度(α値)の情報を入れて返すからです。
その他の回答 (2)
- choconamacream
- ベストアンサー率44% (152/338)
/** 「レコードストアって何?」っていうレベルなので、 もしかしたら、とんちんかんな回答になっているかも。 */ 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に関しても 今回の質問の主旨とは外れるかと思いました。
- salsberry
- ベストアンサー率69% (495/711)
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); } 確認はしていませんが、大ざっぱにはこんな感じです。
お礼
お礼遅れましてすみません。 そしてご回答ありがとうございます。 他のサイトで 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); } という意見を頂きましたが、これは間違っていると思われますか?
補足
正確に書き直します 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ビットに緑が入っている という理由だそうです。
お礼
お礼遅れまして申し訳ございません。 salsberryさんのご回答、納得しました。 ありがとうございました。