none
Тут есть форум, на котором обсуждаются форматы графических файлов и их преобразование? RRS feed

  • Вопрос

  • Подскажите, пожалуйста, есть тут такой форум? Может, в зоне EN, или, может вообще не на Microsoft.

    Интересует тема преобразования BMP, извлечение из них пиксельной информации и пр.
    1 июня 2018 г. 10:11

Ответы

  • Сомневаюсь что есть специальный форум именно по форматам, слишком узкая тема.

    Что до доступа к пикселям, то тут все просто: картинка (все равно в каком формате) загружается стандартным API (WIC например), им же распаковывается и преобразуется в нужный формат пикселей, после чего доступ идет к их массиву. То же самое с преобразованиями: загружаем, сохраняем в другом формате. 

    WIC описан тут:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ee719655%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    Из управляемого кода его можно использовать через COM. В крайнем случае можно даже GDI использовать через System.Drawing


    This posting is provided "AS IS" with no warranties, and confers no rights.

    1 июня 2018 г. 16:10
    Модератор
  • Не ошибаетесь. Формат BMP (DIB) прост как табуретка, если нужно читать только его, никакие библиотеки не нужны. Вот здесь описана структура: https://msdn.microsoft.com/en-us/library/dd183391(VS.85).aspx 

    Насчет "всегда по одному адресу" вы конечно загнули, вариации есть, но достаточно считать bfOffBits из заголовка, чтобы определить его.

      А зачем понадобился раздел форума специально под форматы данных? Тут и разделы с более широкой тематикой загибаются от нехватки активности
    • Изменено VadimTagil 1 июня 2018 г. 18:44
    • Помечено в качестве ответа ЖукMVP, Moderator 4 июля 2018 г. 17:36
    1 июня 2018 г. 18:29
  • Если хотите обрабатывать только какой-то один вариант формата, конечно можете задать смещение жестко, в чем именно тогда вопрос?

    Да, именно так.

    А вопрос в том, чтобы найти спецов в теме - единомышленников, с которыми можно было посоветоваться и обсудить детали технической реализации. Видите, здесь я пока получил только реплику, что во всём не прав (я не вас имею в виду), но аргументов - в чём именно, почему не прав и как правильно - не увидел. С единомышленниками можно рассчитывать на более дружественный и профессиональный подход.

    То что происходит прямого отношения к графическим форматам не имеет, это вопрос подхода к решению задачи.

    То что вы пытайтесь сделать известно в индустрии как "хак". Это означает непродуманное, ограниченное решение которое если и работает, то только в очень узких и, часто, не очень четко определенных условиях. Типично "хаки" считаются недопустимыми, но, увы, случаются.

    Причины появления "хаков" разные. Например, недостаток опыта и/или квалификации исполнителя, плохая документации, недостаток времени и т.п.

    Часто такие "хаки" разрастаются при попытках покрыть изначально нерабочие условия и становятся сложнее и больше чем универсальные решения.

    Рассмотрим ваш конкретный случай... Видимо, он будет работать для конкретного файла с конкретным форматом, размером и т.п. Как только кто то попробует использовать файл с несколько иными параметрами (другой размер, глубина цвета, компрессия - даже формат BMP не так и прост) программа скорее всего упадет с AV. А это звонок в поддержку. Далее, если этот код используется, например, на веб сервере, то получаем проблему с безопасностью с потенциальной возможностью исполнять код удаленно.

    При этом универсальное решение не на много сложнее "хака". А если "хак" хоть немного расширить для проверки ну хотя бы размеров и типа графики для выдачи сообщения об ошибке, то скорее всего проще.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    3 июня 2018 г. 17:39
    Модератор

Все ответы

  • Сомневаюсь что есть специальный форум именно по форматам, слишком узкая тема.

    Что до доступа к пикселям, то тут все просто: картинка (все равно в каком формате) загружается стандартным API (WIC например), им же распаковывается и преобразуется в нужный формат пикселей, после чего доступ идет к их массиву. То же самое с преобразованиями: загружаем, сохраняем в другом формате. 

    WIC описан тут:

    https://msdn.microsoft.com/en-us/library/windows/desktop/ee719655%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

    Из управляемого кода его можно использовать через COM. В крайнем случае можно даже GDI использовать через System.Drawing


    This posting is provided "AS IS" with no warranties, and confers no rights.

    1 июня 2018 г. 16:10
    Модератор
  • Жаль, что нет такой ветки тут.

    Спасибо за ссыль на wic.

    Однако в интересующем меня случае такой подход, на мой взгляд, избыточен.

    Случай такой: bmp-файл, 1-битная палитра (ч/б), 32х32.

    Если я не ошибаюсь, пиксельная информация находится в таком файле, независимо от того, что изображено на картинке, по одному и тому же адресу, и матрица всегда одинакового размера. Значит, её можно выдернуть более простым методом.

    Поправьте, плиз, если я ошибаюсь.


    • Изменено Bbaublys 1 июня 2018 г. 17:27 пунктутация
    1 июня 2018 г. 17:25
  • Не ошибаетесь. Формат BMP (DIB) прост как табуретка, если нужно читать только его, никакие библиотеки не нужны. Вот здесь описана структура: https://msdn.microsoft.com/en-us/library/dd183391(VS.85).aspx 

    Насчет "всегда по одному адресу" вы конечно загнули, вариации есть, но достаточно считать bfOffBits из заголовка, чтобы определить его.

      А зачем понадобился раздел форума специально под форматы данных? Тут и разделы с более широкой тематикой загибаются от нехватки активности
    • Изменено VadimTagil 1 июня 2018 г. 18:44
    • Помечено в качестве ответа ЖукMVP, Moderator 4 июля 2018 г. 17:36
    1 июня 2018 г. 18:29
  • Жаль, что нет такой ветки тут.

    Спасибо за ссыль на wic.

    Однако в интересующем меня случае такой подход, на мой взгляд, избыточен.

    Случай такой: bmp-файл, 1-битная палитра (ч/б), 32х32.

    Если я не ошибаюсь, пиксельная информация находится в таком файле, независимо от того, что изображено на картинке, по одному и тому же адресу, и матрица всегда одинакового размера. Значит, её можно выдернуть более простым методом.

    Поправьте, плиз, если я ошибаюсь.


    Я совсем не соглашусь с вашими доводами как об избыточности так и о простоте. Но если вам хочется самостоятельно разбираться в форматах то конечно это можно сделать. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    1 июня 2018 г. 20:20
    Модератор
  • Насчет "всегда по одному адресу" вы конечно загнули, вариации есть, но достаточно считать bfOffBits из заголовка, чтобы определить его.

    Спасибо за ответ.

    А почему смещение должно меняться? Файл без сжатия, разрешение фиксированное, 1 бит.


  • Я совсем не соглашусь с вашими доводами как об избыточности так и о простоте.  

    Спасибо за ответ.

    Можете подробнее прокомментировать, в чём моя ошибка?

  • В том и дело, что условия задачки таковы, что смещение всегда одинаковое и можно не заморачиваться с его определением каждый раз.

    А раз так, то что мешает открыть bmp посредством того же vba в excel как txt и импортировать содержимое прямо на лист?

  • Формат DIB - расширяемый, как и большинство файловых форматов. Существует несколько версий заголовка разного размера, соответственно смещение битов изображения будет разным. Если хотите обрабатывать только какой-то один вариант формата, конечно можете задать смещение жестко, в чем именно тогда вопрос?
  • Если хотите обрабатывать только какой-то один вариант формата, конечно можете задать смещение жестко, в чем именно тогда вопрос?

    Да, именно так.

    А вопрос в том, чтобы найти спецов в теме - единомышленников, с которыми можно было посоветоваться и обсудить детали технической реализации. Видите, здесь я пока получил только реплику, что во всём не прав (я не вас имею в виду), но аргументов - в чём именно, почему не прав и как правильно - не увидел. С единомышленниками можно рассчитывать на более дружественный и профессиональный подход.

    • Изменено Bbaublys 3 июня 2018 г. 9:31 добавил, для ясности :-)
  • Если хотите обрабатывать только какой-то один вариант формата, конечно можете задать смещение жестко, в чем именно тогда вопрос?

    Да, именно так.

    А вопрос в том, чтобы найти спецов в теме - единомышленников, с которыми можно было посоветоваться и обсудить детали технической реализации. Видите, здесь я пока получил только реплику, что во всём не прав (я не вас имею в виду), но аргументов - в чём именно, почему не прав и как правильно - не увидел. С единомышленниками можно рассчитывать на более дружественный и профессиональный подход.

    То что происходит прямого отношения к графическим форматам не имеет, это вопрос подхода к решению задачи.

    То что вы пытайтесь сделать известно в индустрии как "хак". Это означает непродуманное, ограниченное решение которое если и работает, то только в очень узких и, часто, не очень четко определенных условиях. Типично "хаки" считаются недопустимыми, но, увы, случаются.

    Причины появления "хаков" разные. Например, недостаток опыта и/или квалификации исполнителя, плохая документации, недостаток времени и т.п.

    Часто такие "хаки" разрастаются при попытках покрыть изначально нерабочие условия и становятся сложнее и больше чем универсальные решения.

    Рассмотрим ваш конкретный случай... Видимо, он будет работать для конкретного файла с конкретным форматом, размером и т.п. Как только кто то попробует использовать файл с несколько иными параметрами (другой размер, глубина цвета, компрессия - даже формат BMP не так и прост) программа скорее всего упадет с AV. А это звонок в поддержку. Далее, если этот код используется, например, на веб сервере, то получаем проблему с безопасностью с потенциальной возможностью исполнять код удаленно.

    При этом универсальное решение не на много сложнее "хака". А если "хак" хоть немного расширить для проверки ну хотя бы размеров и типа графики для выдачи сообщения об ошибке, то скорее всего проще.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    3 июня 2018 г. 17:39
    Модератор
  • Спасибо за ответ!

    Насчёт того, что хаки - удел недоучек, не могу согласиться. Зачастую на них способны лишь те, кто глубоко разбирается в предмете, а шаблонные средства не дают желаемого эффекта.
    У некоторых привычка экономить ресурсы глубоко засела ещё с тех времён, когда машины были большие, а память, наоборот, маленькая, но на 64 кБ можно было о-го-го как развернуться. 

    Ещё.
    Любопытную вещь заметил.
    Разве я говорил, что кроме меня "кто то будет использовать файл"? Нет.
    Или, может, говорил, что "этот код будет использоваться на веб сервере"? Тоже нет.
    В зоне Ру на твой вопрос тебе расскажут, как ты во всём не прав, в англоязычной в-основном иначе - вникнут в твои нужды и подскажут если не решение, то путь.

    Полагаю, что вами двигало желание помочь, поэтому ещё раз спасибо.



    • Изменено Bbaublys 3 июня 2018 г. 18:00 орфо
    3 июня 2018 г. 17:59
  • Спасибо за ответ!

    Насчёт того, что хаки - удел недоучек, не могу согласиться. Зачастую на них способны лишь те, кто глубоко разбирается в предмете, а шаблонные средства не дают желаемого эффекта.
    У некоторых привычка экономить ресурсы глубоко засела ещё с тех времён, когда машины были большие, а память, наоборот, маленькая, но на 64 кБ можно было о-го-го как развернуться. 

    Ещё.
    Любопытную вещь заметил.
    Разве я говорил, что кроме меня "кто то будет использовать файл"? Нет.
    Или, может, говорил, что "этот код будет использоваться на веб сервере"? Тоже нет.
    В зоне Ру на твой вопрос тебе расскажут, как ты во всём не прав, в англоязычной в-основном иначе - вникнут в твои нужды и подскажут если не решение, то путь.

    Полагаю, что вами двигало желание помочь, поэтому ещё раз спасибо.



    Я не говорил "что хаки - удел недоучек" и привел несколько причин их появления. Но "недоучки" на них однозначно способны, они просто не понимают что их код является "хаком".

    Что до "экономии ресурсов", то это сегодня делается выбором лучших алгоритмом, а не незатейливыми трюками которые типично приводят лишь к проблемам с поддержанием кода. Вы же их чуть ли не за доблесть воспринимайте. Возможно много лет назад когда я программировал микроконтроллеры с 64 байтами памяти, я с вами бы согласился, но те времена безвозвратно прошли.

    В этом то и проблема и, часто, причина возникновения "хаков": создание кода для текущего момента без просчета/понимая что с ним станет через год/два/десять. Конечно если вы делайте код на выброс, то разницы особой нет. 

    Так я вам и подсказал решение: указал универсальный API который можно использовать. Так же мы побеседовали о подходах и методах создания программ, критериев выбора той или иной реализации. Если вам эта информация не полезна, то возможно кто то другой ей воспользуется.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    3 июня 2018 г. 18:50
    Модератор