Заметки электроника
Простое - надёжнее!
Меню
  • Главная
  • Погода
  • Заметки
  • Календарь
  • Фотогалерея
  • Песни
  • Чтиво
  • Программы
  • Скачать
  • Связь и ссылки
  • Чехия
  • Lavka

Живёшь в Чехии?

Гуманные методы борьбы с муравьями и тлёй

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Жизнь
Создано: 24 мая 2016
Обновлено: 24 мая 2016
Просмотров: 2485
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

Особенно понравилось про двусторонний скотч, вскоре попробую.
http://www.7dach.ru/Tangeya/gumannye-metody-borby-s-muravyami-na-dachnom-uchastke-5658.html

Ещё по теме:
К фитонцидным и отпугивающим тлю растениям относятся все пахучие травы, чеснок, лук, бархатцы, кориандр, мята, фенхель, а также пиретрум и ромашка далматская. Привлекают тлю липа, черёмуха, калина. Сажать их рядом с основными культурами не рекомендуется. 
http://www.pro-rasteniya.ru/pasl-novie-rasteniya/tlya-v-sadu-kak-borotsya-s-tl-y-bez-yadochimikatov-narodnie-sredstva-ot-tli
 

BMP - продолжаем банкет

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 24 мая 2016
Обновлено: 24 мая 2016
Просмотров: 3464
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Вдогонку к предыдущему посту - действительно рабочий код (по крайней мере протестировано на 24 бит изображениях РАЗНОЙ величины): считываем в 32 битные переменные для ARGB с помощью DMA2D построчно (STM32F746).
Читаем снизу вверх с помощью смещения указателя f_seek' ом, слева направо и особое внимание обратите на это:
padding = 0;
scanlinebytes = Size.width * byte_pixel;
while ( ( scanlinebytes + padding ) % 4 != 0 )
padding++;
psw = scanlinebytes + padding;
------------------------------------------------------------------------------------------------------------
  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)
{    
  /* Configure the DMA2D Mode, Color Mode and output offset */
  hdma2d.Init.Mode         = DMA2D_M2M_PFC;
  hdma2d.Init.ColorMode    = DMA2D_ARGB8888;
  hdma2d.Init.OutputOffset = 0;     
  
  /* Foreground Configuration */
  hdma2d.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
  hdma2d.LayerCfg[1].InputAlpha = 0xFF;
  hdma2d.LayerCfg[1].InputColorMode = ColorMode;
  hdma2d.LayerCfg[1].InputOffset = 0;
  
  hdma2d.Instance = DMA2D; 
  
  /* DMA2D Initialization */
  if(HAL_DMA2D_Init(&hdma2d) == HAL_OK) 
  {
    if(HAL_DMA2D_ConfigLayer(&hdma2d, 1) == HAL_OK) 
    {
      if (HAL_DMA2D_Start(&hdma2d, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK)
      {
        /* Polling For DMA transfer */  
        HAL_DMA2D_PollForTransfer(&hdma2d, 10);
      }
    }
  } 
}

BMP формат: хитро и не так тривиально, как думалось

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 22 мая 2016
Обновлено: 22 мая 2016
Просмотров: 3013
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

Скашивается картинка при чтении НЕ ВСЕХ BMP-шек? 
Общую структуру формата можно посмотреть здесь: https://upload.wikimedia.org/wikipedia/commons/c/c4/BMPfileFormat.png

Цитата, на что обратить внимание: каждая строка добивается ненужными байтами чтобы длина строки была кратна 4 байтам.
Пример кода при попиксельном чтении на Си (24-битная глубина):
https://ru.wikipedia.org/wiki/BMP

Пример кода на FoxPro (считывание организовано по-другому, более похоже к считыванию "построчно"):
http://www.sql.ru/forum/819428/razlozhit-bmp-na-pikseli

Не сдержусь и процитирую тут, чтобы не потерялось, грабли, как выяснилось знатные(забыть о мусоре, т.к. картинка считалась верно.... случайно совпало с выравниванием):

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  в другой, обратите внимание на дописывание мусора в файл:
http://jenyay.net/Programming/Bmp

FAT_FS вход в директорию

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 18 мая 2016
Обновлено: 18 мая 2016
Просмотров: 2689
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Директория с именем "4" в корне диска "0"

  res = f_mount(&fs,"0:",1);
  res = f_opendir(&dir, "0:4");
        if (res == FR_OK)
        {
                while (((res = f_readdir(&dir, &fileInfo)) == FR_OK) && fileInfo.fname[0])
                {
                        nFiles++;
                }
        }
        f_closedir(&dir);  

17.05.16 Московская область. Атмосферное давление растёт. Ожидаем тёплую погоду

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Погода
Категория: Альтернативная погода от wow-only.ru
Создано: 17 мая 2016
Обновлено: 17 мая 2016
Просмотров: 2313
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Вопреки прогнозам, мы ожидаем сегодня тёплую погоду. Осадки продолжатся в ввиде кратковременных дождей, высокая вероятность формирования грозовых фронтов. Днём до +25°C.
Давление снова снижается. Ожидаем дожди и прохладу.


 

  1. Поворот точки и полигона относительно другой точки Си. Point and polygon rotation around the origin C code
  2. Фильмы для сознания: права животных
  3. Фильмы для сознания: осознавая связь
  4. Продвинутые возможности отладки в IAR

Страница 152 из 196

  • 147
  • 148
  • 149
  • ...
  • 151
  • 152
  • 153
  • 154
  • ...
  • 156

Back to Top

© 2026 Заметки электроника

Top.Mail.Ru