
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[Ljava.lang.Stringってなんですか
-
同じ配列またはクラスを、2回...
-
C#で動的配列Listの中身をListB...
-
javaについて
-
配列について
-
Javaで文字と数字が混ざったも...
-
ページング
-
C#で配列の戻り値について
-
配列数を超えてアクセスしたと...
-
バイト配列
-
この警告はどうすれば?
-
半角カナの判別方法
-
OrqngeSignal CSVの設定について
-
多次元配列のソートがうまくい...
-
セッションを使ったint型の値の...
-
java 乱数を並べて重複させない...
-
java HashMapのキーをkeySet()...
-
strutsでの配列の扱い方について。
-
配列で、値の入っている要素数...
-
教えて下さい。for文内での変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
フローチャート
-
この警告はどうすれば?
-
[Ljava.lang.Stringってなんですか
-
配列で、値の入っている要素数...
-
C#で動的配列Listの中身をListB...
-
配列の中に複数存在する数がい...
-
セッションを使ったint型の値の...
-
【C#】ハッシュテーブル(連想...
-
javaについて
-
javaでの文字列からの数字抽出
-
配列について
-
javaで大容量テキストファイル...
-
配列数を超えてアクセスしたと...
-
【Ajax通信&Java】配列の受け取...
-
『args[]』とは?
-
ArrayListからBean配列に値をセ...
-
C言語でunsigned char配列を連...
-
strutsで2次元配列をやりとりす...
-
javamailで複数人にメールを送...
おすすめ情報