PHP - çokgen GD kütüphanesinde Bug?

3 Cevap php

Ben gd kütüphanenin imagefilledpolygon() ile bazı sorun haline çalıştırmak.

Benim hatlarının bazı yersiz 1px biten nedense bu yüzden kırmızı benim şekiller puan rengini ayarlamak için imagepixelset kullanarak hata ayıklamak için karar verdi.

alt text if you look at the picture you can see some of the points are inside the shape ... some are outside....its very illogical.

(Resim daha görünür hale getirmek için büyütülüyor edilmiştir)

Herkes bir çözüm var mı?

Güncelleme:

Şekli için benim puan üzerinde idi: 0,0 40,0 40,20 20,20 20,40 0,40

Ben üretilen şeklin yükseklik ve genişlik 20 katları olması gerektiğini gerektirir .... ama nedense şeklinin bazı yüksek veya geniş 21 px biter.

Ben noktaları istediğim şekli almak için ne olacağını çalışmak için bir komut dosyası yaptık ama neden çalışmaz ve bu yüzden ben bütün şekillerini düzeltmek için bir komut dosyası çalışmak değildir.

<?php

// set up array of points for polygon
$values = array(0,0, 39,0, 39,20, 19,20, 19,39, 0,39);

//My original values were 0,0 40,0 40,20 20,20 20,40 0,40
//I do not understand why some values require minus 1 and others can remain as they were (a multiple of 20)

// create image
$image = imagecreatetruecolor(40, 40);

// allocate colors
$bg   = imagecolorallocate($image, 200, 200, 200);
$blue = imagecolorallocate($image, 0, 0, 255);

// fill the background
imagefilledrectangle($image, 0, 0, 39, 39, $bg);

// draw a polygon
imagefilledpolygon($image, $values, 6, $blue);

// flush image
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);


?>

3 Cevap

Şu anda o 'Sarma numarası algoritması' şöyle açıkladı GD kütüphanesini geliştiren adam konuştu - bulunabilir here. Benim örnek görüntüye baktı, o 'sarım sayısının algoritması' nasıl çalıştığını eşleşmiyor, ancak işlevi bu hesaba ve giriş oldu şeklini üretmek gerekir.

Bildiğim kadarıyla ben gördüğünüz gibi doğru (piksel) Bu fonksiyon ile bir içbükey çokgen oluşturmak için tek yolu da koordinatlara sarma kuralını uygular ve buna göre ayarlar ve daha sonra işlevi koymak başka bir işlev yazmaktır.

Benim tahminim konumu ile genişliği karıştırma konum olmasıdır.

Örneğin 0px gelen 9PX için bir çizgi 10px uzun ... yerine pozisyonun ikinci parametre olarak uzunluğu kullanıldığı takdirde, bu 11px uzun sona ereceğini olduğunu.

Bazı kod görebiliyordu eğer ben bu onaylamak olabilir.

Normal poligon render 2 çokgenler bir kenar paylaşmak durumunda her piksel sadece tek bir çokgen olabilir sağlar. Eğer yanyana 2 kare, çizim düşünün, bu yüzden ortak bir kenarı paylaşan, iki kez o kenarından piksel işlemek istemiyorum.

Burada çokgen içinde düşünülmelidir bir çokgenin kenarında piksel belirleyici bir açıklama var: http://www.gameprogrammer.com/5-poly.html

Ortak bir çözüm "bir poligonun sol ve üst kenarlarından piksel sağda poligon ve piksellerin ait ve alt kenarlar yok" demek olduğunu. Ben bunun üzerinde herhangi bir belge bulamadı gibi, GD kullanır ne çözüm% 100 emin değilim, ama buna benzer bir şey bekliyoruz.