Makary155 Opublikowano 31 Stycznia 2011 Udostępnij Opublikowano 31 Stycznia 2011 Napisałem skrypt który generuje mi wysepkę: <?php header("Content-Type: image/png"); $w=500; $h=400; $obraz=imagecreatetruecolor($w,$h); $bg=imagecolorallocate($obraz,200,200,200); imagefill($obraz,1,1,$bg); imagecolortransparent($obraz,$bg); $red=imagecolorallocate($obraz,255,0,0); $black=imagecolorallocate($obraz,0,0,0); $green=imagecolorallocatealpha($obraz,0,255,0,60); $x=20; $y=0; $old_x=rand(20,40); $old_y=rand(20,40); $start_x=$old_x; $start_y=$old_y; for ($i=$old_y; $i<=$h-20; $i=$i+5) { $add=rand(-5,5); if ($x + $add < 10) { $add=-$add; } $x+=$add; imageline($obraz,$old_x,$old_y,$x,$i, $black); $old_x=$x; $old_y=$i; } $y=$old_y; for ($i=$old_x; $i<=$w-20; $i=$i+5) { $add=rand(-5,5); if ($y + $add > $h-20) { $add=-$add; } $y+=$add; imageline($obraz,$old_x,$old_y,$i,$y, $black); $old_x=$i; $old_y=$y; } $x=$old_x; for ($i=$old_y; $i>=20; $i=$i-5) { $add=rand(-5,5); if ($x + $add > $w-20) { $add=-$add; } $x+=$add; imageline($obraz,$old_x,$old_y,$x,$i, $black); $old_x=$x; $old_y=$i; } $y=$old_y; for ($i=$old_x; $i>=30; $i=$i-5) { $add=rand(-5,5); if ($y + $add < 20) { $add=-$add; } $y+=$add; imageline($obraz,$old_x,$old_y,$i,$y, $black); $old_x=$i; $old_y=$y; } imageline($obraz,$old_x,$old_y,$start_x,$start_y,$black); imagefill($obraz,$w/2,$h/2, $green); for ($i=50; $i<=$w; $i=$i+50) { imageline($obraz,$i,0,$i,$h,$red); } for ($i=50; $i<=$h; $i=$i+50) { imageline($obraz,0,$i,$w,$i,$red); } imagerectangle($obraz,1,1,$w-1,$h-1,$red); imagepng($obraz); imagedestroy($obraz); ?> Jak teraz sprawdzić która kratka jest "pusta" tzn jej środek nie zawiera się w zielonym kolorze? Siatka jest 50x50px Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 31 Stycznia 2011 Filar Społeczności Udostępnij Opublikowano 31 Stycznia 2011 Kwadratowa ta wysepka :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 31 Stycznia 2011 Autor Udostępnij Opublikowano 31 Stycznia 2011 Kształt akurat tu nie jest ważny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 31 Stycznia 2011 Udostępnij Opublikowano 31 Stycznia 2011 Środek kwadratu, czy cały kwadrat nie zawiera się w kolorze? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 31 Stycznia 2011 Autor Udostępnij Opublikowano 31 Stycznia 2011 Środek wystarczy, bo jak widać niektóre komórki są wypełnione do połowy. EDIT: Ale skrypt na cały kwadrat też by mi się przydał Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 31 Stycznia 2011 Udostępnij Opublikowano 31 Stycznia 2011 <?php function isImageEmpty( $image, $width = null, $height = null, $startx = 0, $starty = 0 ) { if( !$width ) $width = imagesx( $image ); if( !$height ) $height = imagesy( $image ); $empty = true; for( $x = $startx; $x <= $width; $x++ ) { for( $y = $starty; $y <= $height; $y++ ) { $rgba = imagecolorat( $image, $x, $y ); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $a = ($rgba & 0x7F000000) >> 24; if( $a < 0xFF ) { $empty = false; $x = $y = max($width, $height)+1; //taki break :D } } } } //$x - jest to iloraz szerokości obrazka i szerokości bloku //$y - analogicznie function isBlockEmpty( $image, $x, $y, $a = 49 ) { return isImageEmpty( $image, $x * $a + $a, $y * $a + $a, $x * $a, $y * $a ); } //sam sobie pozamieniaj wartość 49 //pamiętaj, że masz na swoim obrazku w pizdu syfu, który będzie przeszkadzał (margines i linie), jeśli koniecznie chcesz z tym liniami, to sobie sam dorób zią! //nie sprawdzane Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 1 Lutego 2011 Autor Udostępnij Opublikowano 1 Lutego 2011 Dzięki, nawet jeśli nie zadziała to już sobie sam poprawię. Linie zawsze mogę dać jako osobną warstwę - tutaj dałem je żeby było wiadomo, o co chodzi. Btw, jeśli dam imagecolortransparent($obraz,$zielony); To imagecolorat dalej będzie zwracał zielony? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 1 Lutego 2011 Udostępnij Opublikowano 1 Lutego 2011 Nie, będzie zawsze zwracał indeks koloru. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 1 Lutego 2011 Udostępnij Opublikowano 1 Lutego 2011 Swoją drogą, tak popierniczonej biblioteki jak GD dawno nie widziałem ;o Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 1 Lutego 2011 Autor Udostępnij Opublikowano 1 Lutego 2011 Czyli muszę najpierw wygenerować obrazek, wrzucić do tablicy które kwadraty są puste i dopiero usunąć kolor jeśli chcę sprawdzać czy dany fragment jest wewnątrz figury Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 2 Lutego 2011 Udostępnij Opublikowano 2 Lutego 2011 o.0 ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 2 Lutego 2011 Autor Udostępnij Opublikowano 2 Lutego 2011 Nic nic, głośno myślę ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Czarny Ass Opublikowano 3 Lutego 2011 Udostępnij Opublikowano 3 Lutego 2011 Ja tam nie słyszę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się