Гуманные методы борьбы с муравьями и тлёй
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Жизнь
- Просмотров: 1839
Особенно понравилось про двусторонний скотч, вскоре попробую.
Ещё по теме:
К фитонцидным и отпугивающим тлю растениям относятся все пахучие травы, чеснок, лук, бархатцы, кориандр, мята, фенхель, а также пиретрум и ромашка далматская. Привлекают тлю липа, черёмуха, калина. Сажать их рядом с основными культурами не рекомендуется.
BMP - продолжаем банкет
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование
- Просмотров: 2690
Читаем снизу вверх с помощью смещения указателя f_seek' ом, слева направо и особое внимание обратите на это:
ImgSize LoadBitmapFromSD(uint8_t *NameOfFile, uint32_t AddressOfImage) | |
{ | |
uint32_t index = 0, byte_pixel = 0; | |
uint32_t psw, scanlinebytes, padding; | |
ImgSize Size; | |
// uint32_t address; | |
uint32_t input_color_mode = 0; | |
uint8_t pbmp[DisplayWIDTH*4]; | |
uint8_t res; //variable for return values | |
FATFS fs; //fat object FATFS | |
FIL OurFile; // this is our file here | |
UINT br; //just counter | |
DWORD PositionOfFile, LineBytesSize; | |
res = f_mount(&fs,"0:",1); | |
if (res == FR_OK){ | |
//open the file | |
res = f_open(&OurFile,(char const*)NameOfFile,FA_READ); | |
if (res == FR_OK)f_read(&OurFile, pbmp, 30, &br); | |
} | |
else{ | |
//íå óäàëîñü ñìîíòèðîâàòü äèñê | |
Size.height = Size.width =0; | |
return Size; | |
} | |
/* Get bitmap data address offset */ | |
index = *(__IO uint16_t *) (pbmp + 10); | |
index |= (*(__IO uint16_t *) (pbmp + 12)) << 16; | |
/* Read bitmap width */ | |
Size.width = *(uint16_t *) (pbmp + 18); | |
Size.width |= (*(uint16_t *) (pbmp + 20)) << 16; | |
/* Read bitmap height */ | |
Size.height = *(uint16_t *) (pbmp + 22); | |
Size.height |= (*(uint16_t *) (pbmp + 24)) << 16; | |
/* Read bit/pixel */ | |
byte_pixel = (*(uint16_t *) (pbmp + 28))/8; | |
/* Set the address */ | |
/* Get the layer pixel format */ | |
if (byte_pixel == 4) | |
{ | |
input_color_mode = CM_ARGB8888; | |
} | |
else if (byte_pixel == 2) | |
{ | |
input_color_mode = CM_RGB565; | |
} | |
else | |
{ | |
input_color_mode = CM_RGB888; | |
} | |
/* Bypass the bitmap header */ | |
padding = 0; | |
scanlinebytes = Size.width * byte_pixel; | |
while ( ( scanlinebytes + padding ) % 4 != 0 ) | |
padding++; | |
psw = scanlinebytes + padding; | |
PositionOfFile = index + psw * (Size.height - 1); | |
LineBytesSize = byte_pixel * Size.width; | |
res = f_lseek(&OurFile, PositionOfFile); //pointer to the last line of bitmap | |
res = f_read(&OurFile, &pbmp[0], LineBytesSize, &br); | |
/* Convert picture to ARGB8888 pixel format */ | |
for(index=0; index < Size.height; index++) | |
{ | |
/* Pixel format conversion */ | |
LL_ConvertLineToARGB8888(pbmp, (void *)AddressOfImage, (uint32_t) Size.width, (uint32_t) input_color_mode); | |
/* Increment the source and destination buffers */ | |
AddressOfImage += (Size.width * 4); | |
PositionOfFile -= psw; | |
f_lseek(&OurFile, PositionOfFile); //pointer to the last line of bitmap | |
f_read(&OurFile, pbmp, LineBytesSize + (Size.width) % 4, &br); | |
} | |
f_close(&OurFile);//close the file | |
f_mount(NULL, "0:", 0);//unmount the drive | |
return Size; | |
} |
// Сама функция LL_ConvertLineToARGB8888 ниже:
void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode)
BMP формат: хитро и не так тривиально, как думалось
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование
- Просмотров: 2228
Скашивается картинка при чтении НЕ ВСЕХ BMP-шек?
Общую структуру формата можно посмотреть здесь:
Цитата, на что обратить внимание: каждая строка добивается ненужными байтами чтобы длина строки была кратна 4 байтам.
Пример кода при попиксельном чтении на Си (24-битная глубина):
Пример кода на FoxPro (считывание организовано по-другому, более похоже к считыванию "построчно"):
Не сдержусь и процитирую тут, чтобы не потерялось, грабли, как выяснилось знатные(забыть о мусоре, т.к. картинка считалась верно.... случайно совпало с выравниванием):
lnFH = fopen('test.bmp') if lnFH <= 0 ? 'Файл не открылся' return endif lcHead = fread(lnFH, 14) && структура BITMAPFILEHEADER if !left(lcHead, 2) == 'BM' && первые два байта всегда 'BM' ? 'Это не BMP' return endif lnOffset = ctobin(substr(lcHead, 11, 4), '4RS') && Номер байта с которого начинается сама картинка lcHead = fread(lnFH, lnOffset - 14) && Остальной заголовок lnWidth = ctobin(substr(lcHead, 5, 4), '4RS') lnHeight = ctobin(substr(lcHead, 9, 4), '4RS') ? 'Размер:', lnWidth, lnHeight for y = 1 to lnHeight for x = 1 to lnWidth lnR = asc(fread(lnFH, 1)) lnG = asc(fread(lnFH, 1)) lnB = asc(fread(lnFH, 1)) ? "точка (", x, y, ") = RGB(", lnR, lnG, lnB, ")" endfor if (lnWidth * 3) % 4 != 0 fread(lnFH, (lnWidth * 3) % 4) && Пропускаем мусор для выравнивания до 4-х байт endif endfor fclose(lnFH)
Пример преобразования из одного формата BMP в другой, обратите внимание на дописывание мусора в файл:
FAT_FS вход в директорию
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 1997
17.05.16 Московская область. Атмосферное давление растёт. Ожидаем тёплую погоду
- Информация о материале
- Автор: Super User
- Родительская категория: Погода
- Категория: Альтернативная погода от wow-only.ru
- Просмотров: 1728
Давление снова снижается. Ожидаем дожди и прохладу.
Страница 142 из 186