TFT için 24 bit BMP source Code

Başlatan camby, 17 Haziran 2012, 22:39:16

camby

TFT'de kullanmak üzere , 24 bit BMP resmi program hafızasına gömülmek üzere 'source code' olarak elde etmem gerekiyor. 

2 farklı program buldum :
Biri sadece 8bit çıkış veriyor. Image2Code ( MCU içinde 8 bit - 24 bit BMP çevrimi saç baş yoldurttu )

Diğeri ise lisans istiyor , crack ortalıkta yok. Bitmap to GLCD Converter

Nasıl çözüm üretebilirim ?


camby

çok güzel bir program..

Fakat bana "DB" formatında lazım , oluşan 800 satırın başına da "DB" koyamadım :)

bocek

1 ya da 0. işte 'bit'ün mesele..

camby

#4
Alıntı yapılan: bocek - 18 Haziran 2012, 11:30:30
bu işine yarar mı?
http://www.avrportal.com/?page=image2glcd

olmadı bu:
http://www.piclist.com/techref/microchip/bmp2asm.htm
Teşekkürler fakat bunlar da işime yaramadı.

1.si : Renk desteklemiyor

2.si : 24 bit desteklemiyor , 8 bit çevrim işini de yarım yaptı 100x84 yerine 10X84 data çıkardı.

----------------------

Sorumu genişletiyorum :

Bir BMP resmi program hafızasına gömmek yada harici kullandığım flash yada Ram'e göndermek istiyorum.

BMP resmin kaynak kodlarını nasıl görebilirim ?

----------------------------

Bitmap'i basit bekliyordum , şaşırttı beni  :)


Burak B

#5
En basiti BMP olduğunu düşünürsek. Bence fazla şaşırmamalısın. Gözünü çok korkutmasın. Uğraştıkça basitleşir. "Important Color Count" yazan bölmeden sonraki kısım seni çok ilgilendirmez. Ondan önceki verilere göre bitmap verisini okuyacaksın o kadar. Bu Color table dediği olay "indexed color bitmap" söz konusu olduğunda geçerli renk paleti oluyor onuda pas geç. "Compression" kısmı önemli oraya dikkat et. RLE (Run Length Encoding) ise bir decompressor gerekebilir. Yine korkacak bişi yok. RLE' nin algoritması basittir. BMP alfa kanalı barındırmaz normalde. Ancak 24Bit renk bir bitmapin renk verisindeki kulanılmayan son byte ını alfa kanalı olarak azledebilirsiniz. Yani ARGB olarak düşünün. Böylece "Per Pixel Alpha Blending" kullanarak harika arayüzlere sahip olmanız da mümkündür.


"... a healthy dose of paranoia leads to better systems." Jack Ganssle

camby

Sorularım çok fakat öncelikle şunu sorayım :


BMP gösterme/okuma için adım adım takip edebileceğim bir yol haritası/algoritma var mıdır ?

- Header dosyasını bul
- Genişliği oku
- Yüksekliği oku
- ..

gibi....

ArGeMaNiA

Aşağıdaki program konuyla ilgisiz olabilir.Siz şu anda işin içinde olduğunuz için

daha kolay karar verebilirsiniz.

http://friendlyarm.net/dl.php?file=wince5-startlogomaker.zip
Haydi göreyim sizi, vazife-i ubudiyetinizi unutmamak şartıyla öyle çalışınız ki,  rûy-i zemini, her tarafı herbirinize görülen ve her köşesindeki sesleri size işittiren bir bahçeye çeviriniz.

Burak B

Alıntı yapılan: camby - 18 Haziran 2012, 14:29:10
Sorularım çok fakat öncelikle şunu sorayım :


BMP gösterme/okuma için adım adım takip edebileceğim bir yol haritası/algoritma var mıdır ?

- Header dosyasını bul
- Genişliği oku
- Yüksekliği oku
- ..

gibi....

Şöyle düşün bitmap adından elli olacağı gibi bir bit haritası yani bir  diziden ibaret. Bir resim iki boyutludur diye düşünelim. Bu durumda hakkında hiçbirşey bilmediğin 2 boyutlu bir dizinin elemanlarına ulaşmak için ne gibi bilgilere ihtiyacın olur;
- Genişlik
- Yükseklik
- İçerdiği bilginin büyüklüğü (1,4,8,15,16,24,32,48 bit)
... (detay)

doğru mudur? O zaman Bitmap header işte bunları bize bildiren bir yapıdır. Gerisi birkaç matematik işlemi ve dizi işleme algoritmalarından ibarettir.

BMP deki Plane diye geçen bilgi sadece 1 olabilir. Bu durumda işlenecek renk derinliği işimizi görüyor demektir.
n = Renk derinliği dersek;
Dizimizin büyüklüğü Genişlik*Yükseklik*n/8' dir diyeibliriz. Bu durumda dizimizdeki her [ x ][ y ] konumunun içerdiği bilgi bizim renk bilgimiz olacaktır. Bunada 1 pixel diyoruz. Pixeller yan yana koyulunca da resimler oluşur. ;)

Devamında gereken bilgi renk bilgisi ve grafik programcılığından ibarettir. Renk Katmanları, maskeler, alfa kanalları,renk paletleri, v.s. ki bunların hepsine de ihtiyacın olmaz.
Zaten vermiş olduğun bitmap header bilgisini aldığın wiki başlığında herşey detaylıca anlatılıyor.

Umarım anlaşılır olmuştur.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

bocek

şurda da birşeyler var:
// BMP Header Defs
#define BMPFILESIG 0x4d42
typedef uint16_t BmpImageFileType;

typedef struct {
        uint32_t  FileSize;
        uint16_t  RES1;
        uint16_t  RES2;
        uint32_t  ImageDataOffset;
} dibHeader_t;

typedef struct {
        uint32_t  HeaderSize;
        uint32_t  ImageWidth;
        uint32_t  ImageHeight;
        uint16_t  NumberOfImagePlanes;
        uint16_t  BitsPerPixel;
        uint32_t  CompressionMethod;
        uint32_t  SizeOfBitmap;
        uint32_t  HorizResolution;
        uint32_t  VertResolution;
        uint32_t  NumColorsUsed;
        uint32_t  NumSignificantColors;
} bmiHeader_t;
// End BMP Header Defs

 
uint8_t * readBMP(const char fn[], bmiHeader_t *bmp_hdr)
{
   FILE *fp;
   uint8_t *bmp_in;
   BmpImageFileType bmp_type;
   dibHeader_t      bmp_dibhdr;

    if((fp = fopen(fn,"rb"))==NULL)
    {
        printf("Error Opening Bitmap File\n");
        return NULL;
    }
   
    fread(&bmp_type,sizeof(BmpImageFileType),1,fp);

   if(bmp_type != BMPFILESIG)
   {
      printf("Error Not a BMP file\n");
      fclose(fp);
      return NULL;
   }

      fread(&bmp_dibhdr,sizeof(dibHeader_t),1,fp);
      fread(bmp_hdr,sizeof(bmiHeader_t),1,fp);

   if(bmp_hdr->HeaderSize != sizeof(bmiHeader_t)) // sanity check
   {
      printf("BMP Error Incorrect Header Size\n");
      fclose(fp);
      return NULL;
   }

   if((bmp_in = (uint8_t *) malloc(bmp_hdr->SizeOfBitmap)) == NULL)
   {
      printf("Error Allocating Memory for BMP\n");
      fclose(fp);
      return NULL;
   }

   // locate & load the pixmap data
   fseek(fp, bmp_dibhdr.ImageDataOffset, SEEK_SET);
   fread(bmp_in,bmp_hdr->SizeOfBitmap,1,fp);

   fclose(fp);
   return bmp_in;
}


kaynak : http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=68808
1 ya da 0. işte 'bit'ün mesele..