2016-04-11 51 views
1

Tek bir kumaş resminin (bir kadın etnik topun, gerçekte görünmesini sağlamak için gölge efektli bir kadın) olduğu bir uygulama oluşturmaya çalışıyorum ve kullanıcının bir renk sekmesini tıklatmasını istiyorum. Sağ taraf, böylece üst rengi değişir, ancak gölge etkisi aynı kalmalıdır.Resmi değiştir hue libgdx

Bunun için libgdx kullanıyorum. Giriş üstündeki görüntüden bir doku oluşturdum ve onu düzeltmek için doğrusal filtre kullandım. Original Top

ben üstte yerleştirmek istediğiniz yeni bez geçerli::

New Cloth Başlangıçta ben hsv uzaya rgb uzaydan gömlek her pikseli dönüştürülmüş gibi özgün üst görünüyor. Ben gömlek dan tonu, yeni kumaştan doygunluğunu ve parlaklığını (onlar düşük parlaklığa sahip, gölgeleri almak zorunda) kullanılan

  1. : Yukarıdaki sorunu ulaşmak için 4 yöntemleri denedik. Buradaki sorun, kumaşın rengi, parlaklığın en düşük olması nedeniyle ışık haline gelmesidir (parlaklık, üstten gelir). Aşağıdaki resmi üretir: enter image description here

  2. Yeni bezden renk tonu ve doygunluk kullandım ve üst kısımdan parlaklık için bir kesme işlemi yaptım. % 70 kesiktir. Buradaki problem, kumaşın karanlık olduğu zaman gölgelerin net olmadığıdır: her bir pikselde parlaklığı hesaplamak için z-skorunu kullandım. Bluzdaki her pikseldeki parlaklık için z skoru, kumaştaki parlaklığı ayarlamak için kullanılır. Her piksel için z skoru aynı yapılır ve kumaş için parlaklık hesaplar. Bu görüntü de çok kabul edilebilir bakmıyor: enter image description here

ben yukarıdaki senaryoyu başarmak için kullanması gereken hangi yaklaşım üzerinde bir yardıma ihtiyacım var. Doğru yolda mıyım yoksa tamamen yanlış bir şey yapıyorum. Üstün gerçekçi görünüp görünmediğini görmek için dış rengi çıkarmalı mıyım (arka plan ve üst renk aynı olmuyor, bu gerçek dışı bir sonucun sebebi bu mu?

+0

Gimp bu kurmayı deneyin. Resmi tek bir katmana koyun ve ikinci katmanı bir renkle doldurun. Sonra ne istediğinizi bulana kadar üst katman için farklı karışım seçeneklerini deneyin. Gimp karışım modları için denklemleri çevrimiçi olarak bulabilir ve Sprite'ınızın köşe rengi ile aynı şeyi yapan bir gölgelendirici oluşturmak için seçtiğiniz parçayı kullanabilirsiniz. – Tenfour04

+0

@ Tenfour04 - Yardımlarınız için teşekkürler. Ancak, 50'den fazla yeni kumaşın olduğu durumlarda bu çok manuel olacak ve her hafta yeni bir kumaş çıkıyor. Sadece tıklayarak yeni bir renkli top üretmek isteyen teknik olmayan insanlar için bir sistem oluşturmak istiyorum. Yani libgdx/java kodu içindeki her şeyi kodlamalıyım. Başka bir kütüphane kullanarak olabilir. Hala bunu çözüyorum. –

+1

Sanırım önerimi yanlış anlıyorsunuz. Sonuç, uygulamanızdaki herhangi bir şeyi yeniden yüklemek için kullanabileceğiniz tek bir gölgelendiricidir. – Tenfour04

cevap

0

Öncelikle LibGDX'in gerçekten emin değilim. Uygulamak istediğiniz şeyler için doğru ve en iyi alet Benim için ise, görüntü işleme gibi OpenCV mobile ile bağlantılı bir kütüphane için bir iş gibi görünüyor.

Gerçek şu ki ben henüz kullanmadım. OpenCV kendisi ile bazı deneyim var) ve hızlı googleing herhangi bir "resmi" öğretici bu libGDX ile nasıl entegre edileceğini (her ne kadar oldukça emin olsa da) döndürmedim.


Neyse - Böyle rengine çalışmasına LibGDX kullanmak istiyorsanız bir SpriteBatch 'es yöntemini ona işleri işlemek için kullandığınız SpriteBatch renklendirmek için kullanabilirsiniz

void setColor(Color tint) 

var.

  • tonu olmadan:

    batch.begin(); 
    batch.draw(img, 0, 0); 
    batch.end(); 
    

    Sprite Batch without tint

  • tonu uygulanan:

    batch.begin(); 
    batch.setColor(Color.GREEN); 
    batch.draw(img, 0, 0); 
    batch.end(); 
    
    nedeniyle varsayılan

    gördüğünüz gibi etkidir proje oluşturulan

    Sprite Batch with tint applied


Ayrıca renklendirme görüntü bunu arka planı görüntüyü kesip PNG formatında kaydetmek gerekir bu yüzden de arka planı renklendirmek anlamına gelir naif lütfen dikkat ediniz.

bu örneğe göz atın:

Tint image without background

+0

Ben bir mesh oluşturma ve üçgenler hareket gibi, bu konuda başka değişiklikler yapacağız gibi bunu Libgdx içinde yapıyorum. Ayrıca, yukarıdaki şeyin sadece önceden tanımlanmış renkler veya düz renkler için çalışacağını tahmin ediyorum. Üstüne koymak için daha fazla kumaşım var. Bazıları çizgili, kareli vb. Yani bu durumda, yukarıdaki şeyin işe yaramayacağını düşünüyorum. –

+0

Ön tanımlı - değil - RGB değerinizi 'Renk c = yeni Renk (0.2f, 0.3f, 0.4f, 1); 'gibi tanımlayabilirsiniz. Katı - evet maalesef renk tonu tüm partiye sadece bir renk koyuyor. Fotoğrafınızı dilimler halinde kesebilir ve örneğin şeritleri elde etmek için another renk tonu ile birbiriyle üst üste bindirebilirsiniz. Pikselin üzerinde manuel olarak yinelemekten kaçınmak ve bazı yordamlarla pikselleri renklendirmekten kaçınmak dürüst olmamak için en az bir çözüm daha var ... –

+0

Burada hsv alanıyla ilgili bazı manipülasyonların yapılması gerekiyor sanırım. Nasıl yapılabileceğinden emin değilim. Http://www.houseofblouse.com/design/u-neck-2 adresine benzer bir şey yapmak isterim; Ondan daha iyi bir şey infact. –