Autor Zpráva
Oxidián
Profil *
Můžete mi poradit jak odstranit tuto chybu?
Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE on line 93

<?PHP
Class RGB{ 
  public $r; public $g; public $b;
  function RGB($R=0, $G=0, $B=0){
  $this->r=$R; $this->g=$G; $this->b=$B;
  }
};
Class HSV{
  public $h; public $s; public $v;
  function HSV($H=0, $S=0, $V=0){
  $this->h=$H; $this->s=$S; $this->v=$V;
  }
};

Class Converter{
  private $min;
  private $max;
  /*
  function round($n)
  {
      return $n < 0.0 ? ceil($n - 0.5) : floor($n + 0.5); 
  }
  */
  static private function getMinMax($R, $G, $B)
  {
      if ($R < $G )
      {
          if ($R < $B )
              {
            $min = $R;
              if ( $G > $B )
                  $this->max = $G;
              else 
                  $this->max = $B;
              }
          else 
              {
              $min = $B;
              if ( $G > $B )
                  $this->max = $G;
              else 
                  $this->max = $B;
              }
     }
      else
          if ( $G < $B )
              {
              $min = $G;
              $this->max = $B;
              }
          else 
              {
              $min = $B;
              $this->max = $G;
              }
  }

  // Returns the hue, saturation, and brightness of the color
  public function rgb2hsv($rgb, $HSV)
  {
      // $R,$G,$B,$dR,$dG,$dB; // RGB and delta components
      $hsv->h = 0;
      $R = (float) $rgb.r / 255; $G = (float) $rgb.g / 255; $B = (float) $rgb.b / 255;
      $this->getMinMax($R,$G,$B); // get min and max values of RGB
      // float:
    $dMax = $this->max - $min;             //Delta RGB value
      $hsv->v = $this->max;
      if ( $dMax == 0 )                     //This is a gray, no chroma...
      {
         $hsv->h = 0;                                //HSV results from 0 to 1
         $hsv->s = 0;
      }
      else                                    //Chromatic data...
      {
         $hsv->s = $dMax / $this->max ;
         $dR = ( ( ( $this->max - $R ) / 6 ) + ( $dMax / 2 ) ) / $dMax ;
         $dG = ( ( ( $this->max - $G ) / 6 ) + ( $dMax / 2 ) ) / $dMax ;
         $dB = ( ( ( $this->max - $B ) / 6 ) + ( $dMax / 2 ) ) / $dMax ;
  
         if      ( $R == $this->max ) $hsv->h = $dB - $dG ;
         else if ( $G == $this->max ) $hsv->h = ( 1.0 / 3.0 ) + dR - dB ;
         else if ( $B == $this->max ) $hsv->h = ( 2.0 / 3.0 ) + dG - dR ;
  
         if ( $hsv->h < 0 ) $hsv->h += 1 ;
         if ( $hsv->h > 1 ) $hsv->h -= 1 ;
      }
  }

  /* arguments: 
    1) parameter $hsv instance of HSV class 
    2) parameter $rgb instance of RGB class byref
    */ 
  public hsv2rgb($hsv, $rgb)
  {
      private $R,$G,$B,$varH,$varR,varG,varB,$varI,$var1,$var2,$var3;
      if ( $hsv.s == 0 )                       //HSV from 0 to 1
      { $R = $hsv.v * 255; $G = $hsv.v * 255; $B = $hsv.v * 255; }
      else
      {
         $varH = $hsv.h * 6;
         if ( $varH == 6 ) $varH = 0;        //$H must be < 1
         $varI = (int) int( $varH );             //Or ... $varI = floor( $varH )
         $var1 = $hsv.v * ( 1 - $hsv.s );
         $var2 = $hsv.v * ( 1 - $hsv.s * ( $varH - $varI ) );
         $var3 = $hsv.v * ( 1 - $hsv.s * ( 1 - ( $varH - $varI ) ) );
  
         if      ( $varI == 0 ) { $varR = $hsv.v; varG = $var3; varB = $var1; }
         else if ( $varI == 1 ) { $varR = $var2; varG = $hsv.v; varB = $var1; }
         else if ( $varI == 2 ) { $varR = $var1; varG = $hsv.v; varB = $var3; }
         else if ( $varI == 3 ) { $varR = $var1; varG = $var2; varB = $hsv.v;     }
         else if ( $varI == 4 ) { $varR = $var3; varG = $var1; varB = $hsv.v;     }
         else { $varR = $hsv.v; varG = $var1; varB = $var2; }
  
         $rgb->r = (int) round($varR * 255);                  //RGB results from 0 to 255
         $rgb->g = (int) round(varG * 255);
         $rgb->b = (int) round(varB * 255);
      }
  }
}

$rgbcolor = new RGB(256,0,50);
$hsvcolor = new RGB(0,0,0);

$hsv = new rgb2hsv($rgbcolor,$hsvcolor );
print_r($hsvcolor );
$rgb = new hsv2rgb($hsvcolor, $rgbcolor);
print_r($rgb);
?>



Aktuální kód, stejná chyba:
http://paste.ofcode.org/LwxUGtBDxzrYF9mewx8f5n
juriad
Profil
Chybí ti klíčové slovo function na 93. řádku.
Radek9
Profil
Oxidián:
Ona ostatně celá ta funkce je nějaká zvláštní, připadá mi to jako přepsané z Javy. Místo šipky je použita tečka, někde chybí dolary a tím private uvnitř funkce si také nejsem zcela jist.
Oxidián
Profil *
Radek9:
Většinu věcí jsem už opravil

juriad:
Jo dík, a ještě dotaz proč to nemohu rozjet - řádek 129 by měl ukázat instanci rgb.
http://paste.ofcode.org/4nsqGpz5F3f4mwY3bdfr6U

Říkal jsem si že by to mohlo být "hlavičkou":
  public function hsv2rgb($hsv, $rgb)
že rgb možná vytváří lokální proměnnou ale neodkazuje navenek, ale &rgb mi taky nepomohl k zobrazení výsledku. Na konci funkce hsv2rgb ale rgb je platný objekt.
Radek9
Profil
Oxidián:
Protože funkce nic nevrací, ale ovlivňuje předané objekty. Tzn., že výsledek je v $rgbcolor.
Oxidián
Profil *
Sice to jede, ale bohužel to nevychází.


Mám problém s tímto:

      // (float) 
      $R = $rgb->r / 255; $G = $rgb->g / 255; $B = $rgb->b / 255;

Jak získat číslo ve float? Problém je tu to dělení. Výsledek se zaokrouhluje na integer.


Float - tak tenhle bod jsem vyřešil
$R = $rgb->r / (float) 255; $G = $rgb->g / (float) 255; $B = $rgb->b / (float) 255;



Už jsem přišel na chybu. Viz nové vlákno

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0