2015-06-06 27 views
5

Próbuję wyświetlić obraz bitmapowy na ekranie Verifone VX 520.Sposób wyświetlania obrazu bitmapowego na ekranie Verifone VX 520

Próbowałem użyć funkcji put_BMP(), ale zwraca -1, a obraz nie jest wyświetlany. Obraz jest monochromatyczny i ma 128 x 128 pikseli. Oto kod:

int main() { 
    char bg[] = "background.bmp"; 
    int display = open(DEV_CONSOLE, O_WRONLY); 
    put_BMP(bg); 
    return 0; 
} 

Jak to zrobić?

+1

Czym jest errno zestaw do? – David

Odpowiedz

12

Oto kilka rzeczy do sprawdzenia: "[put_BMP()] jest dostępna tylko w trybie pikseli"

1) Aby przełączyć terminal w tryb piksela, należy zadzwonić pod numer set_display_coordinate_mode(PIXEL_MODE); Nie zapomnij go odłożyć, dzwoniąc pod numer set_display_coordinate_mode(CHARACTER_MODE); po zakończeniu.

2) "Plik musi być nieskompresowany."

3) "Plik musi być monochromatyczny lub czteropoziomowy szary." (Widzę to robisz)

4) "Plik powinien być 128 pikseli szerokości i albo 64 pikseli wysokości (Vx510, 570, 610) lub 128 pikseli wysokości (Vx 670)." Zauważ, że 520 nie znajduje się na tej liście, jednak 520 i 570 są bardzo podobne pod wieloma względami, a rozmiar ekranu jest jednym z nich. Jeśli użyjesz piksu o wysokości 128 pikseli, zobaczysz tylko górną połowę tego.

5) Ponadto nie zapomnij o skopiuj plik do terminalu - Robię to częściej, niż chcę przyznać.

Poniższy kod:

set_display_coordinate_mode(PIXEL_MODE); 
put_BMP("StackOverflow.bmp"); 
set_display_coordinate_mode(CHARACTER_MODE); 

używa logo, które wynosi 128 x 64 pikseli i wyniki:

put_BMP result

+1

jaka jest różnica między CHARACTER_MODE i PIXEL_MODE? – farshid

+2

Wiem tylko, że interfejsy API, które obsługują surowe piksele, wymagają PIXEL_MODE, a interfejsy API, które manipulują ekranem przy użyciu znaków ASCII, wymagają parametru CHARACTER_MODE. Zgaduję, że interfejsy API, które nie wchodzą w interakcję z konsolą, nie przejmują się trybem, w którym się znajdujesz, ale nigdy nie eksperymentowałem z tym. Mogę z całą pewnością stwierdzić, że CHARACTER_MODE jest wartością domyślną i działa w przypadku większości połączeń. Przykro mi, że to najlepsza odpowiedź, jaką mam ... – David