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配列に変換する方法わかる方 ご教授の程お願いします。
また、まだコーディングに自信が無いので、文法のミスもご指摘頂けたらありがたいです。
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 …
ご回答ありがとうございます。
しかし今の私にはご教示頂いたコードがすぐに理解できません。
また、ご紹介頂いた参考URLに関しても
今回の質問の主旨とは外れるかと思いました。
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);
}
確認はしていませんが、大ざっぱにはこんな感じです。
この回答への補足
正確に書き直します
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ビットに緑が入っている
という理由だそうです。
お礼遅れましてすみません。
そしてご回答ありがとうございます。
他のサイトで
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);
}
という意見を頂きましたが、これは間違っていると思われますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Java・配列の問題です。 int 「...
-
質問です。 配列が100以上の場...
-
配列の中に複数存在する数がい...
-
JavaのBase64デコードで正しく...
-
【Ajax通信&Java】配列の受け取...
-
Javaで文字と数字が混ざったも...
-
int配列をbyte配列に変換
-
DBからのデータを配列に格納し...
-
配列を使ってカレンダーを表示...
-
main(String[] args) の args...
-
ResourceBundleのgetStringArra...
-
[Ljava.lang.Stringってなんですか
-
配列をセッションに割り当てた後で
-
C言語でunsigned char配列を連...
-
csvファイルを2次元配列に格納
-
javaで大容量テキストファイル...
-
Java CSVファイルをカンマごと...
-
javaでEUC-JP文字列→UTF-8への変換
-
乱数を発生させて、それを配列...
-
Java配列の問題を教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
[Ljava.lang.Stringってなんですか
-
main(String[] args) の args...
-
この警告はどうすれば?
-
【C#】ハッシュテーブル(連想...
-
javamailで複数人にメールを送...
-
jspでの二次元配列
-
配列をセッションに割り当てた後で
-
同じ配列またはクラスを、2回...
-
java
-
Javaで文字を漢字であるか否か...
-
csvファイルを2次元配列に格納
-
配列の中に複数存在する数がい...
-
配列で、値の入っている要素数...
-
JavaのBase64デコードで正しく...
-
C言語でunsigned char配列を連...
-
C#で動的配列Listの中身をListB...
-
【Ajax通信&Java】配列の受け取...
-
javaについて
-
javaでEUC-JP文字列→UTF-8への変換
おすすめ情報