- - PR -
Object型からbyte[]へのキャストの仕方について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-03-17 19:47
getPixelsメソッドを使用して、最終的にbyte[]を取得したいのですが、
java.lang.ClassCastException: [I のエラーがでてしまいます。 どのようにキャストすれば、よいのでしょうか? ----------------------------------------------------------------- ↓ エラーがでます。java.lang.ClassCastException: [I byte[] bytepix = (byte[]) pg.getPixels(); ↓ こちらは、値を取得できます。 int[] intpix = (int[]) pg.getPixels(); ----------------------------------------------------------------- ↓ Java 2 プラットフォーム SE v1.4.0)より public Object getPixels() ピクセルバッファを返します。 ピクセルを保持する明示的なピクセルバッファで PixelGrabber が作成されなかった場合、 このメソッドはイメージのサイズおよび形式がわかるまで null を返します。 ソースイメージが複数の ColorModel を使用してデータを転送する場合は常に、 PixelGrabber はデフォルト RGB ColorModel でデータを蓄積しようとするので、 このメソッドで返される配列オブジェクトは、イメージの取得が完了するまでの間に変化する可能性があります。 戻り値: byte 配列または int 配列 関連項目: getStatus(), setPixels(int, int, int, int, ColorModel, byte[], int, int), setPixels(int, int, int, int, ColorModel, int[], int, int) | ||||
|
投稿日時: 2004-03-17 21:16
キャストの仕方というよりか、java.awt.image.PixelGrabber の使い方ですよね?
int[] 型のピクセルでなく、byte[] 型でなければならない理由とかあるのでしょうか? 〔追記〕 後、PixelGrabber がどのようにインスタンス化されて、どのような操作をされたかを書いたほうが、回答が得られ易いと思いますよ。 [ メッセージ編集済み 編集者: でゅうく 編集日時 2004-03-17 21:23 ] | ||||
|
投稿日時: 2004-03-18 09:19
http://www.vc-net.ne.jp/~ytp/bbs/java/index.html
前回の減色に関する質問でも、 結果報告を双方にきちんとしていませんね。 | ||||
|
投稿日時: 2004-03-18 11:46
返信ありがとうございます。
読み込んできたイメージより、pixel単位で変換をかけるために、PixelGrabberクラスを使用して、 コード-------------------------------------------------------------------------- // 指定された ImageProducer が生成するイメージからピクセルの矩形部分を指定された配列に取り出す。 PixelGrabber pg = new PixelGrabber(image, 0, 0, imageWidth, imageHeight, pixels, 0, imageWidth); // pixelsの各配列には各ピクセル情報を取得。 pg.grabPixels(); ・ ・ // 減色処理 ・ // イメージのピクセルの転送。 pg.setPixels(0, 0, imageWidth, imageHeight,pg.getColorModel(),cPixels, 0, imageWidth); // ↓byte[]型のデータとして取得したいのですが、エラーがでます。 byte[] bytepix = (byte[])pg.getPixels(); -------------------------------------------------------------------------------- int[] 型のピクセルでなく、byte[] 型でなければならない理由なんですが、byte[]型で取得することにより、 イメージの変換後のデータサイズを取得することができます。 ほかに、良い方法があればよいのですが・・・。 -------------------------------------------------------------------------------- TomScissorsさん、ご指摘ありがとうございます。 大変失礼なことをしてしまい、深く反省している所存です。 私は、その言葉すら存じ上げず、今申し訳なささと、恥ずかしさでいっぱいです。 私はまだ、右も左もなにもわからないもので、いろいろなキャリアのある方のお話を数多くお聞きしたく、このような方法をとりました。 決して、軽視していたわけではないことは、ご理解ください。 以後、このようなことのないよう、十分気をつけたいと思います。 | ||||
|
投稿日時: 2004-03-18 14:07
PixelGrabberのコードを読むと、直ぐに原因がわかりますよ。
src.jarを解凍してみてください。 | ||||
|
投稿日時: 2004-03-18 17:47
PixelGrabber クラスのコンストラクタを眺めただけなので外しているかもしれませんが。
PixelGrabber.getPixels() が byte[] を返すのは、 (1) コンストラクタ PixelGrabber(Image, int, int, int, int, boolean) で作られている (2) 第1パラメータの Image オブジェクトのカラーモデルが RGB でない (3) 第6パラメータが false のうちいくつか(すべてかも)を満たす場合に限るのではないでしょうか。 少なくとも他のコンストラクタで作った場合はカラーモデルを RGB に限定して int[] でバッファを与えているわけですから、それを byte[] で返せというのは虫の良い話に思えます。 あと、老婆心ですが、
「右も左もわからない」のだったらわかるようになってからプログラムを書くべきだと思います。 「いろいろなキャリアのある方」云々も、裏を読むと、一つの掲示板で回答される方を信用していないという大変失礼な意味にとれます。ご注意ください。 ご丁寧な挨拶も結構ですが、結果報告を実践されることを強く期待いたします。 | ||||
1
