TFT Display ILI9341 Text Hintergrund transparent möglich?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • TFT Display ILI9341 Text Hintergrund transparent möglich?

      Servus,

      Frage: wie stelle ich es an Text auf dem Display darzustellen mit transparentem Hintergrund? Z.B Text über einem Bild?

      Ich benutze die Declarations von :

      Copyright (c) 2013 Hkipnik. All rights reserved.

      Finde dort aber keine Definition für Transparent?

      Gruß Hans
    • Vielen Dank Hkipnik,


      bin gespannt.

      Ich habe zwischenzeitlich versucht das Bitmap in Paint zu bearbeiten, derart dass die Schrift Bestandteil des Bildes wird.


      Danach konnte ich das Bild ( mit der integrierten Schrift) überhaupt nicht mehr mt dem Display darstellen,
      was ich gar nicht nicht verstehe??

      Gruß Hans
    • Hallo Hans,

      bau das mal hier in dein Programm ein.

      BASCOM-Quellcode

      1. 'in der Declarations.inc speichern
      2. Const Transparent = &H1000
      3. Declare Sub Lcd_text_t(byval S As String , Byval Xoffset As Word , Byval Yoffset As Word , Byval Fontset As Byte , Byval Forecolor As Word , Byval Backcolor As Word )
      4. 'mit der Hintergrundfarbe Transparent wird der Transparent Mode ausgeführt
      5. Call Lcd_text_t( "Hello World" , 10 , 50 , 3 , Blue , Transparent)
      6. 'in der Routines.inc speichern
      7. Sub Lcd_text_t(byval S As String , Xoffset As Word , Yoffset As Word , Fontset As Byte , Forecolor As Word , Backcolor As Word )
      8. Local Tempstring As String * 1 , Temp As Word 'Dim local the variables
      9. Local A As Word , Pixels As Byte , Count As Byte , Carcount As Byte
      10. Local Row As Byte , Block As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
      11. Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
      12. Local Xpos As Word , Ypos As Word , Pixel As Word , Pixelcount As Byte
      13. Local Offset As Word
      14. Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
      15. Select Case Fontset
      16. Case 1 :
      17. Block = Lookup(0 , Font8x8) 'Add or remove here fontset's that you need or not,
      18. Byteseach = Lookup(1 , Font8x8)
      19. Blocksize = Lookup(2 , Font8x8)
      20. Dummy = Lookup(3 , Font8x8)
      21. Case 2 :
      22. Block = Lookup(0 , Font12x16)
      23. Byteseach = Lookup(1 , Font12x16)
      24. Blocksize = Lookup(2 , Font12x16)
      25. Dummy = Lookup(3 , Font12x16)
      26. Case 3 :
      27. Block = Lookup(0 , Crn20x24)
      28. Byteseach = Lookup(1 , Crn20x24)
      29. Blocksize = Lookup(2 , Crn20x24)
      30. Dummy = Lookup(3 , Crn20x24)
      31. End Select
      32. Colums = Blocksize / Block 'Calculate the numbers of colums
      33. Row = Block * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
      34. Row = Row - 1 'Want to start with row=0 instead of 1
      35. Colums = Colums - 1 'Same for the colums
      36. For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
      37. Temp = Carcount + 1 'Cut the text string in seperate caracters
      38. Tempstring = Mid(s , Temp , 1)
      39. Offset = Asc(tempstring) - 32 'Font files start with caracter 32
      40. Offset = Offset * Blocksize
      41. Offset = Offset + 4
      42. Temp = Carcount * Byteseach
      43. Temp = Temp + Xoffset
      44. For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
      45. A = Rowcount + Yoffset
      46. Xpos = Temp
      47. For Columcount = 0 To Colums 'Loop for numbers of Colums
      48. Select Case Fontset
      49. Case 1 : Pixels = Lookup(offset , Font8x8)
      50. Case 2 : Pixels = Lookup(offset , Font12x16)
      51. Case 3 : Pixels = Lookup(offset , Crn20x24)
      52. End Select
      53. Ypos = A
      54. For Pixelcount = 0 To 7 'Loop for 8 pixels to be set or not
      55. If Pixels.0 = 1 Then
      56. Pixel = Forecolor
      57. Else
      58. Pixel = Backcolor
      59. End If
      60. If Pixel <> Transparent Then
      61. Call Lcd_set_pixel(xpos , Ypos , Pixel)
      62. End If
      63. Shift Pixels , Right 'Shift the byte 1 bit to the right so the next pixel comes availible
      64. Incr Ypos 'Each pixel on his own spot
      65. Next Pixelcount
      66. Incr Offset
      67. Incr Xpos 'Do some calculation to get the caracter on the correct Xposition
      68. Next Columcount
      69. Next Rowcount
      70. Next Carcount
      71. End Sub
      Alles anzeigen


      hennesf schrieb:

      Danach konnte ich das Bild ( mit der integrierten Schrift) überhaupt nicht mehr mt dem Display darstellen,
      was ich gar nicht nicht verstehe??
      ohne das Bild zu kennen, kann ich da auch nichts zu sagen.

      Gruß
      Hkipnik
    • Hallo Hans,

      bau das mal hier in dein Programm ein.

      BASCOM-Quellcode

      1. 'in der Declarations.inc speichern
      2. Const Transparent = &H1000
      3. Declare Sub Lcd_text_t(byval S As String , Byval Xoffset As Word , Byval Yoffset As Word , Byval Fontset As Byte , Byval Forecolor As Word , Byval Backcolor As Word )
      4. 'mit der Hintergrundfarbe Transparent wird der Transparent Mode ausgeführt
      5. Call Lcd_text_t( "Hello World" , 10 , 50 , 3 , Blue , Transparent)
      6. 'in der Routines.inc speichern
      7. Sub Lcd_text_t(byval S As String , Xoffset As Word , Yoffset As Word , Fontset As Byte , Forecolor As Word , Backcolor As Word )
      8. Local Tempstring As String * 1 , Temp As Word 'Dim local the variables
      9. Local A As Word , Pixels As Byte , Count As Byte , Carcount As Byte
      10. Local Row As Byte , Block As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As Byte
      11. Local Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As Byte
      12. Local Xpos As Word , Ypos As Word , Pixel As Word , Pixelcount As Byte
      13. Local Offset As Word
      14. Stringsize = Len(s) - 1 'Size of the text string -1 because we must start with 0
      15. Select Case Fontset
      16. Case 1 :
      17. Block = Lookup(0 , Font8x8) 'Add or remove here fontset's that you need or not,
      18. Byteseach = Lookup(1 , Font8x8)
      19. Blocksize = Lookup(2 , Font8x8)
      20. Dummy = Lookup(3 , Font8x8)
      21. Case 2 :
      22. Block = Lookup(0 , Font12x16)
      23. Byteseach = Lookup(1 , Font12x16)
      24. Blocksize = Lookup(2 , Font12x16)
      25. Dummy = Lookup(3 , Font12x16)
      26. Case 3 :
      27. Block = Lookup(0 , Crn20x24)
      28. Byteseach = Lookup(1 , Crn20x24)
      29. Blocksize = Lookup(2 , Crn20x24)
      30. Dummy = Lookup(3 , Crn20x24)
      31. End Select
      32. Colums = Blocksize / Block 'Calculate the numbers of colums
      33. Row = Block * 8 'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.
      34. Row = Row - 1 'Want to start with row=0 instead of 1
      35. Colums = Colums - 1 'Same for the colums
      36. For Carcount = 0 To Stringsize 'Loop for the numbers of caracters that must be displayed
      37. Temp = Carcount + 1 'Cut the text string in seperate caracters
      38. Tempstring = Mid(s , Temp , 1)
      39. Offset = Asc(tempstring) - 32 'Font files start with caracter 32
      40. Offset = Offset * Blocksize
      41. Offset = Offset + 4
      42. Temp = Carcount * Byteseach
      43. Temp = Temp + Xoffset
      44. For Rowcount = 0 To Row Step 8 'Loop for numbers of rows
      45. A = Rowcount + Yoffset
      46. Xpos = Temp
      47. For Columcount = 0 To Colums 'Loop for numbers of Colums
      48. Select Case Fontset
      49. Case 1 : Pixels = Lookup(offset , Font8x8)
      50. Case 2 : Pixels = Lookup(offset , Font12x16)
      51. Case 3 : Pixels = Lookup(offset , Crn20x24)
      52. End Select
      53. Ypos = A
      54. For Pixelcount = 0 To 7 'Loop for 8 pixels to be set or not
      55. If Pixels.0 = 1 Then
      56. Pixel = Forecolor
      57. Else
      58. Pixel = Backcolor
      59. End If
      60. If Pixel <> Transparent Then
      61. Call Lcd_set_pixel(xpos , Ypos , Pixel)
      62. End If
      63. Shift Pixels , Right 'Shift the byte 1 bit to the right so the next pixel comes availible
      64. Incr Ypos 'Each pixel on his own spot
      65. Next Pixelcount
      66. Incr Offset
      67. Incr Xpos 'Do some calculation to get the caracter on the correct Xposition
      68. Next Columcount
      69. Next Rowcount
      70. Next Carcount
      71. End Sub
      Alles anzeigen


      hennesf schrieb:

      Danach konnte ich das Bild ( mit der integrierten Schrift) überhaupt nicht mehr mt dem Display darstellen,
      was ich gar nicht nicht verstehe??
      ohne das Bild zu kennen, kann ich da auch nichts zu sagen.

      Gruß
      Hkipnik
    • Servus Holger,

      danke für deine Mühe. Ich werde das mit dem transparenten Hintergrund bei Schriften gleich mal testen.
      Wenn es klappt hat sich die Frage mit der Schrift im Bitmapbild eigentlich erledigt denn dann kann ich ja die Schrift über das Bild legen.

      Aber ich habe noch eine andere Frage: Am Ende der Main Datei bindest du 4 Fonts ein:

      $include "Font\Digital20x32.font" '4
      $include "Font\font12x16.font" '2
      $include "Font\font25x32.font" '1
      $include "Font\crn20x24.font" '3

      Ich habe versucht einen der anderen Fonts einzubinden mit:

      $include "Font\Digital14x24.font"

      das hat nicht funktioniert. Sicher liegt es daran dass bei der Übergabe des Befehls

      Lcd_text "Datum/ Uhrzeit:" , 2 , 40 , 2 , Blue , Yellow , 1

      der Font nur mit einer Nummer, hier 2, übergeben wird. Wie lassen sich den anderen Fonts Nummern zuordnen

      so dass man sie zum Anschauen auf dem Display einbinden kann?

      Schönen Tag noch .

      Gruß Hans
    • Hallo,

      die Font Namen müssen in der Sub Lcd_Text eingebunden werden.



      BASCOM-Quellcode

      1. Select Case Fontset
      2. Case 2:
      3. Char_rows = Lookup(0 , Font12x16)
      4. Char_row_len = Lookup(1 , Font12x16)
      5. Char_bytes = Lookup(2 , Font12x16)
      6. Dummy = Lookup(3 , Font12x16)
      7. Case 1:
      8. Char_rows = Lookup(0 , Font25x32)
      9. Char_row_len = Lookup(1 , Font25x32)
      10. Char_bytes = Lookup(2 , Font25x32)
      11. Dummy = Lookup(3 , Font25x32)
      12. Case 3:
      13. Char_rows = Lookup(0 , Crn20x24)
      14. Char_row_len = Lookup(1 , Crn20x24)
      15. Char_bytes = Lookup(2 , Crn20x24)
      16. Dummy = Lookup(3 , Crn20x24)
      17. Case 4:
      18. Char_rows = Lookup(0 , Digital20x32)
      19. Char_row_len = Lookup(1 , Digital20x32)
      20. Char_bytes = Lookup(2 , Digital20x32)
      21. Dummy = Lookup(3 , Digital20x32)
      22. End Select
      23. For String_pos = 1 To Len(lcd_text) 'Für jedes Zeichen im String
      24. Pzeichen = Mid(lcd_text , String_pos , 1) 'Ein Zeichen aus String holen
      25. Zeichen_code = Asc(pzeichen) - 32 'Font files start with caracter 32
      26. Zeichen_code = Zeichen_code * Char_bytes
      27. Doph = Zeichen_code
      28. Doph = Doph + 4
      29. For Px = 1 To Char_bytes
      30. Select Case Fontset
      31. Case 1 : Zeichenarray(px) = Lookup(doph , Font25x32)
      32. Case 2 : Zeichenarray(px) = Lookup(doph , Font12x16)
      33. Case 3 : Zeichenarray(px) = Lookup(doph , Crn20x24)
      34. Case 4 : Zeichenarray(px) = Lookup(doph , Digital20x32)
      35. End Select
      36. Incr Doph
      37. Next Px
      Alles anzeigen
    • Servus Holger,
      habe den Code zwischen den TEST Kommentaren eingefügt:

      'TEST einfügen anderer Font
      Case 5:


      Char_rows = Lookup(0 , My6x8)
      Char_row_len = Lookup(1 , My6x8)
      Char_bytes = Lookup(2 , My6x8)
      Dummy = Lookup(3 , My6x8)


      'TEST



      End Select



      For String_pos = 1 To Len(lcd_text) 'Für jedes Zeichen im String
      Pzeichen = Mid(lcd_text , String_pos , 1) 'Ein Zeichen aus String holen
      Zeichen_code = Asc(pzeichen) - 32 'Font files start with caracter 32
      Zeichen_code = Zeichen_code * Char_bytes


      Doph = Zeichen_code
      Doph = Doph + 4
      For Px = 1 To Char_bytes


      Select Case Fontset
      Case 1 : Zeichenarray(px) = Lookup(doph , Font25x32)
      Case 2 : Zeichenarray(px) = Lookup(doph , Font12x16)
      Case 3 : Zeichenarray(px) = Lookup(doph , Crn20x24)
      Case 4 : Zeichenarray(px) = Lookup(doph , Digital20x32)


      'TEST einfügen anderer Font


      Case 5 : Zeichenarray(px) = Lookup(doph , My6x8)


      'Test

      folgende Fehlermeldung beim Kompilieren:

      Error : 61 Line : 448 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 448 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 449 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 449 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 450 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 450 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 451 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 451 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 476 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc
      Error : 61 Line : 476 Label not found [MY6X8] , in File : TFTDriver\ILI9341_routines_spi.inc



      Sagt dir das was??

      Gruß Hans

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hennesf ()

    • Hallo djmsc,
      ist ne ziemlich große Datei. Original von hkipnik
      Hier der Abschnitt wo der Fehler auftaucht wenn ich versuche den Font My6x8 darzustellen:

      Code:

      Sub Lcd_text(byval Lcd_text As String , Byval Lcd_posx As Word , Byval Lcd_posy As Word , Byval Fontset As Byte , Byval Forecolor As Word , Byval Backcolor As Word , Byval Bold As Byte)


      Local Pzeichen As String * 1
      Local Zeichen_row As Word
      Local Ptemp As Word
      Local Ptemp2 As Word
      Local Px As Word
      Local Py As Word
      Local Char_rows As Byte
      Local Char_row_len As Byte
      Local Char_bytes As Byte
      Local Dummy As Byte
      Local String_pos As Byte
      Local Zeichen_code As Word
      Local Fcolh As Byte , Fcoll As Byte , Bacolh As Byte , Bacoll As Byte
      Local Doph As Word , Zbv As Byte
      Fcolh = High(forecolor)
      Fcoll = Low(forecolor)
      Bacolh = High(backcolor)
      Bacoll = Low(backcolor)


      Select Case Fontset
      Case 2:
      Char_rows = Lookup(0 , Font12x16)
      Char_row_len = Lookup(1 , Font12x16)
      Char_bytes = Lookup(2 , Font12x16)
      Dummy = Lookup(3 , Font12x16)
      Case 1:
      Char_rows = Lookup(0 , Font25x32)
      Char_row_len = Lookup(1 , Font25x32)
      Char_bytes = Lookup(2 , Font25x32)
      Dummy = Lookup(3 , Font25x32)
      Case 3:
      Char_rows = Lookup(0 , Crn20x24)
      Char_row_len = Lookup(1 , Crn20x24)
      Char_bytes = Lookup(2 , Crn20x24)
      Dummy = Lookup(3 , Crn20x24)
      Case 4:
      Char_rows = Lookup(0 , Digital20x32)
      Char_row_len = Lookup(1 , Digital20x32)
      Char_bytes = Lookup(2 , Digital20x32)
      Dummy = Lookup(3 , Digital20x32)



      ' TEST einfügen anderer Font
      Case 5:


      Char_rows = Lookup(0 , My6x8)
      Char_row_len = Lookup(1 , My6x8)
      Char_bytes = Lookup(2 , My6x8)
      Dummy = Lookup(3 , My6x8)


      'TEST




      End Select



      For String_pos = 1 To Len(lcd_text) 'Für jedes Zeichen im String
      Pzeichen = Mid(lcd_text , String_pos , 1) 'Ein Zeichen aus String holen
      Zeichen_code = Asc(pzeichen) - 32 'Font files start with caracter 32
      Zeichen_code = Zeichen_code * Char_bytes


      Doph = Zeichen_code
      Doph = Doph + 4
      For Px = 1 To Char_bytes


      Select Case Fontset
      Case 1 : Zeichenarray(px) = Lookup(doph , Font25x32)
      Case 2 : Zeichenarray(px) = Lookup(doph , Font12x16)
      Case 3 : Zeichenarray(px) = Lookup(doph , Crn20x24)
      Case 4 : Zeichenarray(px) = Lookup(doph , Digital20x32)



      'TEST einfügen anderer Font


      Case 5 : Zeichenarray(px) = Lookup(doph , My6x8)




      End Select
      Incr Doph


      Next Px


      Py = Char_rows * 8
      Py = Py * Bold
      Py = Py + Lcd_posy


      Px = String_pos - 1
      Px = Px * Char_row_len
      Px = Px + Lcd_posx


      Select Case Bold
      Case 1:
      Ptemp = Px + Char_row_len
      Case 2:
      Px = Px * Bold '* 2
      Px = Px - Lcd_posx
      Ptemp = Px + Char_row_len
      Ptemp = Ptemp + Char_row_len
      Case 3:
      Px = Px * Bold '* 3
      Px = Px - Lcd_posx
      Px = Px - Lcd_posx
      Ptemp = Px + Char_row_len
      Ptemp = Ptemp + Char_row_len
      Ptemp = Ptemp + Char_row_len
      Case 4:
      Px = Px * Bold '* 4
      Px = Px - Lcd_posx
      Px = Px - Lcd_posx
      Px = Px - Lcd_posx
      Ptemp = Px + Char_row_len
      Ptemp = Ptemp + Char_row_len
      Ptemp = Ptemp + Char_row_len
      Ptemp = Ptemp + Char_row_len
      End Select


      Decr Ptemp
      Call Lcd_set_window(px , Lcd_posy , Ptemp , Py)
      Lcd_cs = 0
      Lcd_dc = 1


      For Py = 1 To Char_rows
      Ptemp = Py - 1
      Ptemp = Ptemp * Char_row_len


      For Zeichen_row = 0 To 7
      For Doph = 1 To Bold
      For Px = 1 To Char_row_len
      Ptemp2 = Ptemp + Px
      If Zeichenarray(ptemp2).zeichen_row = 1 Then
      For Zbv = 1 To Bold
      Spiout Fcolh , 1
      Spiout Fcoll , 1
      Next Zbv
      Else
      For Zbv = 1 To Bold
      Spiout Bacolh , 1
      Spiout Bacoll , 1
      Next Zbv
      End If
      Next Px
      Next Doph
      Next Zeichen_row
      Next Py
      Next String_pos
      Lcd_cs = 1
      End Sub


      Gruß Hans
    • Jep,
      das war's.

      Ich habe mich orientiert an dem Namen des Font im Ordner Font, was ja hier:

      $include "Font\my6x8.font" '5

      auch passt.

      Wenn man sich den Font aber mit einem Editor anschaut steht in den ersten Zeilen:

      FONT6x8:
      $asm
      .db 1,6,6,0
      .db 0,0,0,0,0,0 ;

      Da muss man erst mal drauf kommen.

      Vielen Dank Holger. Vielleicht klappt ja jetzt auch das mit dem transparenten Hintergrund.

      Schönen Abend und nochmals danke.

      Gruß Hans

      Noch ein Nachtrag:

      Der Font My12x16.font und der Font 12x16.font

      tragen am Anfang das gleiche Label. Font12x16:

      Werden beide eingebunden gibt es also eine Fehlermeldung "Duplicate Label"

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hennesf ()