ピクセルの赤と青の色の値を交換したいと思います。これを行うメソッドは、ピクセルを int 0xAARRGGBB として受け取ります。ここで、AA はアルファの 16 進値、色の r、g、b です。たとえば、完全に不透明な青の場合は 0xFF0000FF です。
値を文字列に変換し、substring() を使用してそれを切り取り、変更された順序でつなぎ合わせて、結果を int に戻します。これはエレガントではないようで、機能しません。
public int filterRGB(int x, int y, int pixel) {
int filteredPixel;
String s, a, r, g, b, res;
s = Integer.toString(pixel);
a = s.substring(2,4);//alpha
r = s.substring(4,6);//r
g = s.substring(6,8);//g
b = s.substring(8,10);//b
res = "0x" + a + b + g + r;
filteredPixel = Integer.parseInt(res);
return filteredPixel;
うまくいかない理由はsubstring(8,10)のようです。その行以降のコードは実行されません。substring(8,9) で動作しますが、それはブルースの 2 番目の 16 進数値をカットします。自分で調べても分からないので、どなたか教えていただけないでしょうか?