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

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

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

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

Скашивается картинка при чтении НЕ ВСЕХ 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
Просмотров: 2777
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Директория с именем "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
Просмотров: 2400
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Вопреки прогнозам, мы ожидаем сегодня тёплую погоду. Осадки продолжатся в ввиде кратковременных дождей, высокая вероятность формирования грозовых фронтов. Днём до +25°C.
Давление снова снижается. Ожидаем дожди и прохладу.


 

Поворот точки и полигона относительно другой точки Си. Point and polygon rotation around the origin C code

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 11 мая 2016
Обновлено: 14 мая 2016
Просмотров: 3378
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
typedef struct 
{
  int16_t X;
  int16_t Y;
}Point, * pPoint;

Точка:
Point RotatePoint(Point Coord, Point Coord0, float32_t angle){ //angle max is 2pi rad 
static float32_t cosV;
static float32_t sinV;
static float32_t Xo;
static float32_t Yo;
static float32_t X;
static float32_t Y;


 // angle*= 0.017453292f;
  cosV = arm_cos_f32(angle);
  sinV = arm_sin_f32(angle);
  
  X = (float32_t)Coord.X;
  Y = (float32_t)Coord.Y;
  Xo = (float32_t)Coord0.X;
  Yo = (float32_t)Coord0.Y;

  Coord.X = (uint16_t)(Xo + (((X - Xo)*cosV)) + (((Yo - Y)*sinV))+0.5);
  Coord.Y = (uint16_t)(Yo + (((X - Xo)*sinV)) + (((Y - Yo)*cosV))+0.5);

return Coord;
}

Полигон поворот положительные градусы = по часовой стрелке (координата Y - сверху вниз, X - слева направо) в (0.001 * angle_deg) градусах:
void RotatePoly(Point* pToPoints, uint8_t NumbOfPoints, const pPoint Origin, int32_t angle_deg){
  int i;
  float32_t angle = 1.7453292e-5 * (float32_t)angle_deg;  
  for(i = 0; i < NumbOfPoints; i++){
   pToPoints[i] = RotatePoint(pToPoints[i], *Origin, angle);
  }
}

Фильмы для сознания: права животных

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Биотехнологии
Создано: 14 мая 2016
Обновлено: 14 мая 2016
Просмотров: 2870
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
  1. Фильмы для сознания: осознавая связь
  2. Продвинутые возможности отладки в IAR
  3. Coocox где скачать
  4. 27.04.16 Центральный регион. Давление финитно растёт. Ждём прояснения

Страница 154 из 197

  • 149
  • ...
  • 151
  • 152
  • 153
  • 154
  • ...
  • 156
  • 157
  • 158

Back to Top

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

Top.Mail.Ru