2016-10-11 5 views
-3

changeBlue(weight)を書きます。ピクチャの前半のピクセルの色を変更しないでください。後半では、各ピクセルの青の値をnew blue=original blue * weightに変更します。例えばJavaメソッドchangeBlue(重量)を書きます

画素が値(200100100)を有し、重量が0.5である、 場合、新しい値が(200,100,50)であろう。重みが1.5の場合、 は新しい値が(200,100,150)になります。

この方法をテストするには、任意のイメージを使用できます。

ここに私のものがあります。私はかなり近いと思うが、いくつかのエラーが出ている。アドバイスをいただければ幸いです。

public void changeBlue(int weight) 
{ 
    Pixel[] pixelArray = this.getPixels(); 
    Pixel pixelObj = null; 
    int value = 0; 
    int index = 0; 

    while (index >= pixelArray.length/2) 
    { 

     pixelObj = pixelArray[index]; 

     value = pixelObj.getBlue(); 

     value = (value * weight); 

     pixelObj.setBlue(value); 

     index++; 
    } 
} 
+7

どのようなエラーが表示されますか? – Actorclavilis

+4

'index> = pixelArray.length/2'ですが、この' loop'はかなり頻繁に実行されることはありません。 – SomeJavaGuy

+0

@KevinEscheのコメントに続いて、 'for'ループを使ってすべての配列をループし、' if'ステートメントで右半分かどうかを調べるか、配列の後半でインデックスを開始するだけです。 – aleb2000

答えて

0

を開始するために、changeBlueメソッドのパラメータは、これはあなたの仕様与えられdoubleすべきではない、intのですか?

あなたはまたindexが最初0に設定されている、とあなたのループのみindex> =半分の画素配列の長さ(pixels.length/2)しながら実行されます。したがって、pixels.length/20を返さない限り、このループは開始されません。開始されると、決して終了しません。

forステートメントを使用することをお勧めします。 intを配列の長さの半分(pixels.length/2)に初期化し、ループの末尾にpixels配列インデックス(pixels.length - 1)を実行した後に終了するように設定し、毎回1ずつ増加するようにします。

詳細およびforステートメントの使用方法については、https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.htmlを参照してください。

さらに、setBlue()intをパラメータとして使用する場合は、キャストする必要があります。例えば(int) (weight * value)。しかし、あなたはPixelクラスの詳細を提供していません。

実装例:青が0になった場合の実用的なノートで

public void changeBlue(double weight) { 
    for (int i = pixelArray.length/2; i < pixelArray.length; i++) { 
     pixelArray[i].setBlue((int) (pixelArray[i].getBlue() * weight)); 
    } 
} 

、あなたはchangeBlueを使用してそれを変更することはできませんが、この動作は、この場合には多少論理的だろう。

+0

ありがとうございます。私は体重が2倍になることを考えていました。 – user1729377

0

ない最適な実装が、試してみてください。

public void changeBlue(int weight) 
{ 
    Pixel[] pixelArray = this.getPixels(); 
    Pixel pixelObj = null; 
    int value = 0; 
    int index = 0; 
    int halfSize = pixelArray.length/2; 

    for (index = 0; index <= pixelArray.length; index++) { 
     if (index <= halfSize){ 
      // FIrts half of the file 
     } 
     if (index > halfSize) { 
      // Seconde part of the file 
      pixelObj = pixelArray[index]; 

      value = pixelObj.getBlue(); 
      value = (value * weight); 

      pixelObj.setBlue(value); 
     } 
    } 
} 
関連する問題