[ VirtualPoP @ 14.06.2012. 18:11 ] @
Radim seminarski na fakultetu. Zadatak je da se izracuna povrsina zatvorene konture proizvoljnog oblika, kontura se ucitava kao .bmp slika.
Problem sam resio. Dakle iskoristio sam Imagick klasu i uptrebio colorFloodfillImage() funkciju itd. Dakle to je reseno i cim odbranim seminarski okacicu ovo ovde posto je bilo vise pitanja na ovu temu a i uopste ima dosta postova kojekuda na tu temu ali resenje ne nadjoh nigde :) A posebno mi je drago sto sam to uradio u php, iako je preporuceno pomocu C++ ili C#.

Elem, kao sto rekoh resio sam problem ali nisam to uradio na elegantan nacin. Sad zelim da kreiram wrapper klasu za Imagick klasu, s tim sto cu samo deo funkcionalnosti klase da podrzim pomocu moje klase. Medjutim kod mi ne radi. Nemam nikakvu kontrolu nad objektom nakon sto izadjem iz konstruktora. Evo jednostavan primer koji bi trebalo da radi a ne radi.

Code:

<?php 
header('Content-Type: png');
class Slika
{
    public function __construct()
    {
        $slika = new imagick('fig2.jpg');
        $slika->setImageFormat( "png" );
        //echo $slika;
    }
     public function __destruct(){ unset($slika); }
    public function getSlika(){return $slika;}
    public function echoSlika(){echo $slika;}
    private $slika;
}
    $sl=new Slika;
    $sl->echoSlika();
    //echo $sl->getSlika();
    $sl->__destruct();
    
//$im = new imagick( 'fig2.jpg' );
//$im->setImageFormat( "png" );
//echo $im; 
?>


Dakle ovako: ukoliko uklonim prvi komentar koji se nalazi u konstruktoru, prikaze se slika pri izvrsenju. Ukoliko uklonim poslednja 3 komentara i kreiram Imagick objekat direkno u telu programa sve radi perfektno. Medjutim ako pokusam da kreiram moju objekat Slika i pokusam da izvrsim echo slike pomocu echoSlika() ili getSlika() ne dobijem nista kad izvrsim stranu. Uopste ne kapiram gde gresim. Moze li mi neko pomoci?

[ Nemanja Avramović @ 15.06.2012. 10:20 ] @
Kada se završi izvršavanje konstruktora nestaju sve promenljive definisane u njemu.

Iznad konstruktora stavi private $slika; a svuda u kodu umesto $slika koristi $this->slika i radiće.


Code:
class Slika
{
    private $slika;
    public function __construct()
    {
        $this->slika = new imagick('fig2.jpg');
        $this->slika->setImageFormat( "png" );
        //echo $slika;
    }
     public function __destruct(){ unset($this->slika); }
    public function getSlika(){return $this->slika;}
    public function echoSlika(){echo $this->slika;}

}
[ VirtualPoP @ 15.06.2012. 19:53 ] @
@Nemanja hvala na odgovoru. To je to nama sta, ja sam takodje pronasao resenje pa da ga okacim mozda bude nekom od koristi:

Citat:

<?php
header('Content-Type: png');
class klasaSlika extends imagick
{
public function __construct()
{
parent::__construct('fig2.bmp');
//$slika = new imagick('fig2.jpg');
//echo $this;
}
public function __destruct(){ unset($slika); }
public function getSlika(){return $this;}
public function echoSlika(){echo $this;}
private $slika;
}
$sl=new klasaSlika();
//$sl->echoSlika();
$sl->colorFloodfillImage('yellow',10,'black',0,0);
echo $sl->getSlika();
file_put_contents ('slike/test_klase.png', $sl->getSlika());
$sl->__destruct();

//$im = new imagick( 'fig2.jpg' );
//$im->setImageFormat( "png" );



//echo $im;
//$sl->echoSlika();
//echo ($width*$height)-$counter;

?>


Dakle napravio sam izvedenu klasu, a posto su funkcije u osnovnoj klasi Imagick deklarisane kao protected, onda mora takodje pokazivac $this, kao sto si i ti Nemanja koristio.