Resim basma algoritması

Başlatan Mucit23, 07 Şubat 2016, 00:07:03

Mucit23

Selamlar

STM32F429 Discovery'de Yatay formda çizilmiş bir resmi dikey şekilde sürülen TFT Ekrana basmam gerekiyor. LCD'ye yatay forma getirmek bana çok iş açıyor. Sıkıntı sadece resim basmada olduğundan bu şekilde çözebilirim diye düşündüm.

Resim datası sol taraftaki resime göre dizili vaziyette. Ekran ram yapısı ise sağ taraftaki gibi. PutPixel gibi doğrudan X ve Y kordinatı vererek basmaktan açıkçası kaçınıyorum. Sayac arttıkça sırayla resim dizisindeki uygun elemanları bulup ram'e yazmam lazım.

Bunu nasıl yapabilirim?

JKramer

#1
Image2Lcd programında "scan mode=vertical" ve "Scan bottom to top" seçenekleriyle yapabilirsiniz sanırım.

Ek: https://320volt.com/grafik-lcd-projeleriniz-icin-image-lcd-programi/

kimlenbu


Mucit23

Evet RGB565, Fakat gerçekte hafızadaki resmi basmayacağım, Resim yerine kameradan gelen görüntüleri basacağım.

Aslında kağıt üzerinde bir şeyler karalamıştım.
  int Xpos=0, Ypos=0, Count=0;
   int Index=0;
   for(Xpos=0;Xpos<320;Xpos++)
   {
        for(Ypos=1;Ypos<=240;Ypos++)
        {
             Index=76800-((320-Xpos)*Ypos);
        }
   }
Henüz deneyemedim ama bu kod çalışacak gibi. İndex değer resim dizisinin indexi olacak. Ufak tefek düzeltmeler gerekiyor. İlk fırsatta deneyeceğim.

Mucit23

#4
Bu yapıyıda çalıştıramadım bir türlü. Alakasız görüntüler alıyorum.

Kimler bu konuda fikir yürütebilir?

mesaj birleştirme:: 08 Şubat 2016, 22:27:49

Sonunda Doğru yöntemi buldum.

İlk başta nerden estiyse resmi tersten tarayarak basmaya çalıştım. Muhtemelen mantık hatası olduğundan dolayı alakasız resim çıkıyordu.

Yukarıdaki sorumun cevabını aşağıdaki kodlarla çözdüm.

  int Xpos=0, Ypos=0, Count=0;
	int Index=0;
	for(Xpos=319;Xpos>=0;Xpos--)
	{
		for(Ypos=239;Ypos>=0;Ypos--)
		{
			 Index=(Ypos*320)-Xpos;
	     *(__IO uint16_t*) (LCD_FRAME_BUFFER+ BUFFER_OFFSET + Count*2) = Resim[Index];
			 Count++;
		}
	}

Timucin

Herkese Merhabalar;
GLCD'ler bana hep lisede Matematikte gördüğümüz Matrix'leri hatırlatmıştır; yukardaki sizin verdiğiniz şekli gördüğümde ise, nedense Matrix'lerde uygulanan transpose işlemini çağrıştırdı bana.
Ben de internette ufak bir arama yaptım, ancak bulduklarım işinizi görür mü emin değilim. Belki daha derin arama yapılırsa bir şeyler bulunabilir ??

http://stackoverflow.com/questions/797251/transposing-multidimensional-arrays-in-php

http://bilgisayarkavramlari.sadievrenseker.com/2008/12/29/matris-tersyuz-matrix-transpose/

http://www.programmingsimplified.com/c-program-transpose-matrix

Saygılarımla
Timuçin

bluekid


z

#7
O kadar gıcık bir iş ki yatay pixelleri dikey pixellere çevirmek için işlemci çok yorulacak.

Aşağıdaki linkteki OLED displayde hemen hemen aynı sorun başıma gelmişti.

https://www.picproje.org/index.php/topic,62993.msg489020.html#msg489020

Sorunu işlemciye çözdürmek yerine PCdeki bir yazılımla halletmiştim.

İşin gerçekten zor. Kullandığın işlemcinin belki donanımsal bir özelliği vardır. İyice inceledinmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Mucit23

LCD konfigürasyonunda LCD konumu  yatay, Dikey, ters, düz vs her türlü ayarlanıyor. Fakat bayağı bi işin içine girmek gerek. Çok vakit harcanır o işe. Ben yukarıdaki kodlarla işimi hallettim.

Resim döndürme konusunda ILI9341'in bir özelliği yok hocam. O iş problem gerçekten.