Работа с Bmp

Модераторы: Duncon, Naeel Maqsudov, Хыиуду, Игорь Акопян

oif
Сообщения: 42
Зарегистрирован: 09 ноя 2006, 21:03

10 апр 2007, 17:00

Как отбросить заголовок Bmp файла?
И дальше продолжать считывание из файла (по пиксельно),файл монохромный.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

10 апр 2007, 17:43

Создать монохромный файл, залить его определенным цветом, открыть в hex-редакторе и посмотреть, где заканчиваются байты этого цвета
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
oif
Сообщения: 42
Зарегистрирован: 09 ноя 2006, 21:03

10 апр 2007, 18:44

Хыиуду писал(а):Создать монохромный файл, залить его определенным цветом, открыть в hex-редакторе и посмотреть, где заканчиваются байты этого цвета
Меня интересует как по байтно считать,и сколько байт выделяется на 1 пиксель в монохромном рисунке.
Т.е задача состоит в следущем есть BMP,считываем из него значения пикселей по строчно и раскладываем данный ряд с помощью преобразований фурье.
Т.е мне надо получить
1 пиксель=245
2 пиксель=1
3 пиксель=65
и.т.д
Аватара пользователя
SergeyS
Сообщения: 193
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

11 апр 2007, 05:19

используй у битмапа свойство .ScanLine, которое возвращает указатель его "пикселы".
Работа в данном случае осуществляется напрямую с памятью, без всяких GDI (GDI используется для получения данного указателя)
oif
Сообщения: 42
Зарегистрирован: 09 ноя 2006, 21:03

11 апр 2007, 09:38

Можно пример кода маленький?
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

11 апр 2007, 09:58

Я бы шабку обошел просто (у bmp 2 заголовка)

Код: Выделить всё

var
  fh: TBitmapfileheader;
  ih: TBitmapinfoheader;
  s: TFileStream;
begin
  s := TFileStream.Create(Form1.OPicDial.FileName, fmOpenRead);
  try
    s.Read(fileh, SizeOf(fileh));
    s.Read(infoh, SizeOf(infoh));
    {Все с этого места идет непосредственно изображение}
  finally
    s.Free;
  end;
end;
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

11 апр 2007, 10:45

Duncon писал(а):Я бы шабку обошел просто (у bmp 2 заголовка)

Код: Выделить всё

var
  fh: TBitmapfileheader;
  ih: TBitmapinfoheader;
  s: TFileStream;
begin
  s := TFileStream.Create(Form1.OPicDial.FileName, fmOpenRead);
  try
    s.Read(fileh, SizeOf(fileh));
    s.Read(infoh, SizeOf(infoh));
    {Все с этого места идет непосредственно изображение}
  finally
    s.Free;
  end;
end;
Про палитру забыл
2B OR NOT(2B) = FF
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

11 апр 2007, 10:49

oif писал(а):Меня интересует как по байтно считать,и сколько байт выделяется на 1 пиксель в монохромном рисунке.
1 байт на два пискеля, если градаций 16 и 1 байт на пиксель, если их 256.
oif писал(а): Т.е задача состоит в следущем есть BMP,считываем из него значения пикселей по строчно и раскладываем данный ряд с помощью преобразований фурье.
BMP прочитать не можешь, а в ряд Фурье разложить можешь?
2B OR NOT(2B) = FF
oif
Сообщения: 42
Зарегистрирован: 09 ноя 2006, 21:03

11 апр 2007, 10:53

Еще вопрос.
Если рисунок монохромный то как я понимаю,оттенки могут быть от 0 до 255.
У меня получаются через canvas.pixels тысячи.
Как мне получить данные значения?
Или я ошибаюсь?
oif
Сообщения: 42
Зарегистрирован: 09 ноя 2006, 21:03

11 апр 2007, 10:58

Absurd писал(а): BMP прочитать не можешь, а в ряд Фурье разложить можешь?
Да и такое бывает:-)
Поэтому и прошу помощи с конкретными примерами.
Ответить