• ベストアンサー

プログラムで

次のtry文がよくわからなくて困っています。わかる方いましたら解説お願いします。 try{ int r = (int)(pixels[i]&0x00ff0000); if (r!=0x00000000){r = ((int)((pixels[i]&0x00ff0000)*0.5)&0x00ff0000);} int g = (int)(pixels[i]&0x0000ff00); if (g!=0x00000000){g = ((int)((pixels[i]&0x0000ff00)*0.5)&0x0000ff00);} int b = (int)(pixels[i]&0x000000ff); if (b!=0x00000000){b = ((int)((pixels[i]&0x000000ff)*0.5)&0x000000ff);} if((((w+i)/w)%2)!=0){epixels[i] = 0xff000000| r | g | b ; uepixels[i]=pixels[i];} else {epixels[i] = pixels[i]; uepixels[i] = 0xff000000| r | g | b ;} }catch(Exception ex){;} }

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

  • ベストアンサー
回答No.3

画像の変換プログラムの一部でしょうか? 前半部分は前回回答させていただいていますので、また、try-catchとは関係なく、 if((((w+i)/w)%2)!=0){  epixels[i] = 0xff000000| r | g | b ;  uepixels[i]=pixels[i]; } else {  epixels[i] = pixels[i];  uepixels[i] = 0xff000000| r | g | b ; } の部分の解説になろうかと思います。 wを画像の横方向のpixel数と仮定しますと、1行おきにif文の条件がtrueとfalse入れ替わりますね。 epixels[]とuepixels[]は似たような感じのもので、1行おきに、元の色使いのままの行と明るさ半減した行を合成したものとして出来上がりますね。違いは偶数行を半減させるか、奇数行を半減させるか。 さて、その結果、epixels[]やuepixels[]を、このあとどう使うのかは、私には解りません... 参考まで。

mos21
質問者

お礼

以前もご回答いただきまして、今回もありがとうございました。

その他の回答 (2)

回答No.2

aloopさんがおっしゃるとおり、全体が分からないのですが、 r,g,bという文字、規則的なビット演算をみる限り、 色情報について変換を試みているように思えます。 pixels[i]の値(おそらくint)を8ビットずつ区切って、下から1ビット目から8ビット目までを青(b)情報、9ビット目から16ビット目まで緑(g)情報、17ビット目から24ビット目まで赤(r)情報が入っていて、それぞれのビットの部分だけを抜き出し(pixels[i]&0x0000ff00, pixels[i]&0x0000ff00, pixels[i]&0x000000ffとマスク計算している箇所)、半分の値を算出し(0.5掛け)、0.5掛けしたことによる端数を除去するため再度マスク計算していますね。これからr、g、bの値をそれぞれ半分の値を計算しています。 最後のif文でepixels[i]、uepixels[i]のいずれかにそれぞれ半分の値を計算したr、g、bを論理和計算(|)した値を代入していますね。 ビット演算は、参考URLを参照してください。

参考URL:
http://www2s.biglobe.ne.jp/~yuuki_ki/java_operator5.htm
mos21
質問者

お礼

はい、ありがとうございました。

  • aloop
  • ベストアンサー率23% (10/43)
回答No.1

何がどうわからないのか私には判断しかねるのですが、 このtryブロック中で起こり得るのは、変数iが配列のインデクスより大きいことで起こる例外  「 ArrayIndexOutOfBoundsException 」 ですね。

mos21
質問者

お礼

ありがとうございましたー。

関連するQ&A

専門家に質問してみよう