Merge pull request #1606 from siddacious/bmp_bitdepths

added monochrome, 8bpp indexed, and 32bpp ARGB BMPs
This commit is contained in:
Dan Halbert 2019-03-01 12:04:34 -05:00 committed by GitHub
commit 1ba761086a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 208 additions and 161 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -756,28 +756,24 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "Parity ganjil tidak didukung"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr "Hanya 8 atau 16 bit mono dengan "
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
@ -984,6 +980,9 @@ msgstr "Tidak dapat menemukan GCLK yang kosong"
msgid "Unable to init parser"
msgstr ""
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Tidak dapat memasang filesystem kembali"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 19:57-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -730,28 +730,24 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr ""
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr ""
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
@ -951,6 +947,9 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr ""

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 19:57-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@ -748,29 +748,25 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "Eine ungerade Parität wird nicht unterstützt"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr "Nur 8 oder 16 bit mono mit "
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Nur unkomprimiertes Windows-Format (BMP) unterstützt %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
"Es werden nur Bitmaps mit einer Farbtiefe von 8 Bit oder weniger unterstützt"
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
@ -984,6 +980,9 @@ msgstr "Konnte keinen freien GCLK finden"
msgid "Unable to init parser"
msgstr "Parser konnte nicht gestartet werden"
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Dateisystem konnte nicht wieder eingebunden werden."
@ -2142,3 +2141,6 @@ msgstr "y Wert außerhalb der Grenzen"
msgid "zero step"
msgstr ""
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Nur unkomprimiertes Windows-Format (BMP) unterstützt %d"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -730,28 +730,24 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr ""
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr ""
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
@ -951,6 +947,9 @@ msgstr ""
msgid "Unable to init parser"
msgstr ""
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -770,31 +770,27 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "Paridad impar no soportada"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr "Solo mono de 8 o 16 bit con "
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Solo formato Windows, BMP sin comprimir soportado %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr "Solo se admiten bit maps de color de 8 bits o menos"
#, c-format
msgid ""
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
#, fuzzy
msgid "Only slices with step=1 (aka None) are supported"
msgstr "solo se admiten segmentos con step=1 (alias None)"
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
msgstr "Solo tx soportada en UART1 (GPIO2)"
@ -1003,6 +999,9 @@ msgstr "No se pudo encontrar un GCLK libre"
msgid "Unable to init parser"
msgstr "Incapaz de inicializar el parser"
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Incapaz de montar de nuevo el sistema de archivos"
@ -2168,5 +2167,8 @@ msgstr "address fuera de límites"
msgid "zero step"
msgstr "paso cero"
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Solo formato Windows, BMP sin comprimir soportado %d"
#~ msgid "Only true color (24 bpp or higher) BMP supported %x"
#~ msgstr "Solo color verdadero (24 bpp o superior) BMP admitido %x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@ -768,31 +768,27 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "Odd na parity ay hindi supportado"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr "Tanging 8 o 16 na bit mono na may "
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Tanging Windows format, uncompressed BMP lamang ang supportado %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr "Tanging bit maps na may 8 bit color o mas mababa ang supportado"
#, c-format
msgid ""
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
#, fuzzy
msgid "Only slices with step=1 (aka None) are supported"
msgstr "ang mga slices lamang na may hakbang = 1 (aka None) ang sinusuportahan"
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
msgstr "Tanging suportado ang TX sa UART1 (GPIO2)."
@ -1005,6 +1001,9 @@ msgstr "Hindi mahanap ang libreng GCLK"
msgid "Unable to init parser"
msgstr "Hindi ma-init ang parser"
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Hindi ma-remount ang filesystem"
@ -2174,5 +2173,8 @@ msgstr "wala sa sakop ang address"
msgid "zero step"
msgstr "zero step"
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Tanging Windows format, uncompressed BMP lamang ang supportado %d"
#~ msgid "Only true color (24 bpp or higher) BMP supported %x"
#~ msgstr "Dapat true color (24 bpp o mas mataas) BMP lamang ang supportado %x"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-12-23 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n"
@ -772,31 +772,27 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "parité impaire non supportée"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr "Uniquement 8 ou 16 bit mono avec "
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Seul les BMP non-compressé au format Windows sont supportés %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr "Seules les bitmaps de 8bits par couleur ou moins sont supportées"
#, c-format
msgid ""
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
#, fuzzy
msgid "Only slices with step=1 (aka None) are supported"
msgstr "seuls les slices avec 'step=1' (cad None) sont supportées"
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
msgstr "Seul le tx est supporté sur l'UART1 (GPIO2)."
@ -1016,6 +1012,9 @@ msgstr "Impossible de trouver un GCLK libre"
msgid "Unable to init parser"
msgstr "Impossible d'initialiser le parser"
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Impossible de remonter le système de fichiers"
@ -2198,5 +2197,8 @@ msgstr "adresse hors limites"
msgid "zero step"
msgstr "'step' nul"
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Seul les BMP non-compressé au format Windows sont supportés %d"
#~ msgid "Only true color (24 bpp or higher) BMP supported %x"
#~ msgstr "Seul les BMP 24bits ou plus sont supportés %x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@ -767,31 +767,27 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "operazione I2C non supportata"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr ""
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Formato solo di Windows, BMP non compresso supportato %d"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr "Sono supportate solo bitmap con colori a 8 bit o meno"
#, c-format
msgid ""
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
#, fuzzy
msgid "Only slices with step=1 (aka None) are supported"
msgstr "solo slice con step=1 (aka None) sono supportate"
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
msgstr "Solo tx supportato su UART1 (GPIO2)."
@ -1003,6 +999,9 @@ msgstr "Impossibile trovare un GCLK libero"
msgid "Unable to init parser"
msgstr "Inizilizzazione del parser non possibile"
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Imposssibile rimontare il filesystem"
@ -2170,5 +2169,8 @@ msgstr "indirizzo fuori limite"
msgid "zero step"
msgstr "zero step"
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Formato solo di Windows, BMP non compresso supportato %d"
#~ msgid "Only true color (24 bpp or higher) BMP supported %x"
#~ msgstr "Solo BMP true color (24 bpp o superiore) sono supportati %x"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-02-23 10:51-0800\n"
"POT-Creation-Date: 2019-03-01 07:16-0800\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -756,28 +756,24 @@ msgstr ""
msgid "Odd parity is not supported"
msgstr "I2C operação não suportada"
#, c-format
msgid ""
"Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"
msgstr ""
msgid "Only 8 or 16 bit mono with "
msgstr ""
#, c-format
msgid "Only Windows format, uncompressed BMP supported %d"
msgstr "Apenas formato Windows, BMP descomprimido suportado"
msgid ""
"Only Windows format, uncompressed BMP supported: given header size is %d"
msgstr ""
msgid "Only bit maps of 8 bit color or less are supported"
msgstr "Apenas bit maps de cores de 8 bit ou menos são suportados"
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
#, c-format
msgid ""
"Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale "
"BMP supported %d"
"Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp "
"given"
msgstr ""
msgid "Only slices with step=1 (aka None) are supported"
msgstr ""
msgid "Only tx supported on UART1 (GPIO2)."
@ -979,6 +975,9 @@ msgstr "Não é possível encontrar GCLK livre"
msgid "Unable to init parser"
msgstr ""
msgid "Unable to read color palette data"
msgstr ""
msgid "Unable to remount filesystem"
msgstr "Não é possível remontar o sistema de arquivos"
@ -2118,5 +2117,8 @@ msgstr ""
msgid "zero step"
msgstr "passo zero"
#~ msgid "Only Windows format, uncompressed BMP supported %d"
#~ msgstr "Apenas formato Windows, BMP descomprimido suportado"
#~ msgid "Only true color (24 bpp or higher) BMP supported %x"
#~ msgstr "Apenas cores verdadeiras (24 bpp ou maior) BMP suportadas"

View File

@ -56,42 +56,65 @@ void common_hal_displayio_ondiskbitmap_construct(displayio_ondiskbitmap_t *self,
uint16_t bits_per_pixel = bmp_header[14];
uint32_t compression = read_word(bmp_header, 15);
uint32_t number_of_colors = read_word(bmp_header, 23);
bool indexed = ((bits_per_pixel <= 8) && (number_of_colors != 0));
self->bitfield_compressed = (compression == 3);
self->grayscale = ((bits_per_pixel == 8) && (number_of_colors == 256));
self->bits_per_pixel = bits_per_pixel;
self->width = read_word(bmp_header, 9);
self->height = read_word(bmp_header, 11);
if (bits_per_pixel == 16){
if (((header_size == 124) || (header_size == 56)) && (self->bitfield_compressed)) {
if (((header_size >= 56)) || (self->bitfield_compressed)) {
self->r_bitmask = read_word(bmp_header, 27);
self->g_bitmask = read_word(bmp_header, 29);
self->b_bitmask = read_word(bmp_header, 31);
if (!((self->r_bitmask == 0xf800) && (self->g_bitmask == 0x07e0) && (self->b_bitmask == 0x001f))){
mp_raise_ValueError_varg(translate("Only 16bpp RGB 565 supported for bitfield compressed BMPs; R:%x G:%x B:%x"),
self->r_bitmask, self->g_bitmask, self->b_bitmask);
}
} else if (header_size == 40){ // no bitmasks means 5:5:5
} else { // no compression or short header means 5:5:5
self->r_bitmask = 0x7c00;
self->g_bitmask = 0x3e0;
self->b_bitmask = 0x1f;
}
} else if ((indexed) && (self->bits_per_pixel != 1)) {
uint16_t palette_size = number_of_colors * sizeof(uint32_t);
uint16_t palette_offset = 0xe + header_size;
} else if (!(header_size == 12 || header_size == 40 || header_size == 108 || header_size == 124) ||
!(compression == 0)) {
mp_raise_ValueError_varg(translate("Only Windows format, uncompressed BMP supported %d"), header_size);
self->palette_data = m_malloc(palette_size, false);
f_rewind(&self->file->fp);
f_lseek(&self->file->fp, palette_offset);
UINT palette_bytes_read;
if (f_read(&self->file->fp, self->palette_data, palette_size, &palette_bytes_read) != FR_OK) {
mp_raise_OSError(MP_EIO);
}
if (palette_bytes_read != palette_size) {
mp_raise_ValueError(translate("Unable to read color palette data"));
}
} else if (!(header_size == 12 || header_size == 40 || header_size == 108 || header_size == 124)) {
mp_raise_ValueError_varg(translate("Only Windows format, uncompressed BMP supported: given header size is %d"), header_size);
}
if (bits_per_pixel < 16 && !(self->grayscale)) {
mp_raise_ValueError_varg(translate("Only true color (24 bpp or higher), 16bpp 565 and 555, and 8bpp grayscale BMP supported %d"), bits_per_pixel);
if ((bits_per_pixel == 4 ) || (( bits_per_pixel == 8) && (number_of_colors == 0))) {
mp_raise_ValueError_varg(translate("Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d bpp given"), bits_per_pixel);
}
self->bytes_per_pixel = bits_per_pixel / 8;
self->width = read_word(bmp_header, 9);
self->height = read_word(bmp_header, 11);
uint32_t byte_width = self->width * self->bytes_per_pixel;
self->stride = byte_width;
// Rows are word aligned.
if (self->stride % 4 != 0) {
self->stride += 4 - self->stride % 4;
if (self->bits_per_pixel >=8){
self->stride = (self->width * (bits_per_pixel / 8));
// Rows are word aligned.
if (self->stride % 4 != 0) {
self->stride += 4 - self->stride % 4;
}
} else {
uint32_t bit_stride = self->width;
if (bit_stride % 32 != 0) {
bit_stride += 32 - bit_stride % 32;
}
self->stride = (bit_stride / 8);
}
}
@ -100,39 +123,54 @@ uint32_t common_hal_displayio_ondiskbitmap_get_pixel(displayio_ondiskbitmap_t *s
if (x < 0 || x >= self->width || y < 0 || y >= self->height) {
return 0;
}
uint32_t location = self->data_offset + (self->height - y) * self->stride + x * self->bytes_per_pixel;
uint32_t location;
uint8_t bytes_per_pixel = (self->bits_per_pixel / 8) ? (self->bits_per_pixel /8) : 1;
if (self->bits_per_pixel >= 8){
location = self->data_offset + (self->height - y) * self->stride + x * bytes_per_pixel;
} else {
location = self->data_offset + (self->height - y) * self->stride + x / 8;
}
// We don't cache here because the underlying FS caches sectors.
f_lseek(&self->file->fp, location);
UINT bytes_read;
uint32_t pixel = 0;
uint32_t result = f_read(&self->file->fp, &pixel, self->bytes_per_pixel, &bytes_read);
uint32_t pixel_data = 0;
uint32_t result = f_read(&self->file->fp, &pixel_data, bytes_per_pixel, &bytes_read);
if (result == FR_OK) {
uint32_t tmp = 0;
uint8_t red;
uint8_t green;
uint8_t blue;
if (self->grayscale){
red = pixel;
green = pixel;
blue = pixel;
tmp = (red << 16 | green << 8 | blue);
return tmp;
} else if (self->bytes_per_pixel == 2) {
if (self->bitfield_compressed){
red =((pixel & self->r_bitmask) >>11);
green = ((pixel & self->g_bitmask) >>5);
blue = ((pixel & self->b_bitmask) >> 0);
if (self->bits_per_pixel == 1){
uint8_t bit_offset = x%8;
tmp = ( pixel_data & (0x80 >> (bit_offset))) >> (7 - bit_offset);
if (tmp == 1) {
return 0x00FFFFFF;
} else {
red =((pixel & self->r_bitmask) >>10);
green = ((pixel & self->g_bitmask) >>4);
blue = ((pixel & self->b_bitmask) >> 0);
return 0x00000000;
}
} else if (bytes_per_pixel == 1){
blue = ((self->palette_data[pixel_data] & 0xFF) >> 0);
red = ((self->palette_data[pixel_data] & 0xFF0000) >> 16);
green = ((self->palette_data[pixel_data] & 0xFF00) >> 8);
tmp = (red << 16 | green << 8 | blue );
return tmp;
} else if (bytes_per_pixel == 2) {
if (self->g_bitmask == 0x07e0) { // 565
red =((pixel_data & self->r_bitmask) >>11);
green = ((pixel_data & self->g_bitmask) >>5);
blue = ((pixel_data & self->b_bitmask) >> 0);
} else { // 555
red =((pixel_data & self->r_bitmask) >>10);
green = ((pixel_data & self->g_bitmask) >>4);
blue = ((pixel_data & self->b_bitmask) >> 0);
}
tmp = (red << 19 | green << 10 | blue << 3);
return tmp;
}else {
return pixel;
} else if ((bytes_per_pixel == 4) && (self->bitfield_compressed)) {
return pixel_data & 0x00FFFFFF;
} else {
return pixel_data;
}
}
return 0;
}

View File

@ -44,9 +44,9 @@ typedef struct {
uint32_t g_bitmask;
uint32_t b_bitmask;
bool bitfield_compressed;
bool grayscale;
pyb_file_obj_t* file;
uint8_t bytes_per_pixel;
uint8_t bits_per_pixel;
uint32_t* palette_data;
} displayio_ondiskbitmap_t;
#endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_ONDISKBITMAP_H