| Autor | Zpráva | ||
|---|---|---|---|
| Oxidián Profil * |
#1 · Zasláno: 18. 6. 2014, 15:59:57 · Upravil/a: Oxidián
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 |
#3 · Zasláno: 18. 6. 2014, 16:18:38
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 * |
#4 · Zasláno: 18. 6. 2014, 16:35:45
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) |
||
| Radek9 Profil |
#5 · Zasláno: 18. 6. 2014, 16:47:00
Oxidián:
Protože funkce nic nevrací, ale ovlivňuje předané objekty. Tzn., že výsledek je v $rgbcolor. |
||
| Oxidián Profil * |
#6 · Zasláno: 18. 6. 2014, 17:09:11 · Upravil/a: Oxidián
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 |
||
|
Časová prodleva: 12 let
|
|||
0