Tiff файлы

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем alexey, 7 дек 2005.

Статус темы:
Закрыта.
  1. alexey

    alexey Гость

    Проблема с сохранением Tiff файлов, сначала это была проблема как их открыть, т.к. под рукой были только tiff с LZW компрессией и на них все ругались, добрался до GraphicEx но и он не помог, но вот потом выяснилось что по тех заданию такого и не требуется - PageMaker все равно такое тоже не любит. Тогда остановился на GraphicEx и начал открывать с его помощью, потом в базу и обратно. Но вот проблема - содержимое файла после такого сохранения сильно меняется - размер может увеличиться раза в два и самое неприятное - изменяется рисунок - например разбивается на две части и они отображаются со смещением - прям Фотошоп какой-то :D.
    Читаю-пишу стандартно - через DBImage. Сервер - SQLServer через ADO.
    Delphi 5, поэтому LibTiffDelphi использовать не удалось.
     
  2. Barmutik

    Barmutik Гость

    В качестве альтернативы можно попробовать читать и писать руками через TBlobStream ... с ним обычно всё работает нормально ...

    Как будет работать TDBImage с незнакомым форматом (проинсталенным дополнииельно) вопрос отдельный .. может глюк где в библиотеке ...
     
  3. alexey

    alexey Гость

    Согласен - так будет работать - так уже делал, но вся проблема в том, что мне нужно его еще и показывать в базе- например в той же dxGrid. С GraphicEx dc работает - файлы нормально показывает, читает, пишет в БД и показывает из нее же. Проблема только в момент сохранения - иногда сохраняет нормально. иногда нет. Похоже что в GraphicEx не поддержки сохранения Tiff, может что-то аналогичное есть?
    И книга как специально исчезла - была у меня книга подробным и простым описанием работы нескольких графических форматов и работа с ними в Delphi(на более серьезные вещи просто нет времени).
     
  4. Barmutik

    Barmutik Гость

    Я бы посоветовал присовать самому в гриде ... проблем на 30 минут работы .. а сохранение всё же на себя взять что бы избежать проблем ..
     
  5. alexey

    alexey Гость

    В dx в общем-то можно, причем корректно и аккуратно на canvas. Но а чем рисовать-то? Файл будет лежать в bin поле и отнгюдь не в более-менее нормальном понятном для DB компонент формате а в своем родном. Конечно плюс - что содержимое файла в базе не будет отличаться от исходного файла.
    Но кто ж его тогда поймет?
     
  6. Barmutik

    Barmutik Гость

    Что-то не свосме поняно Ваше последнее .. Вы ж сами его в базу пишете ? Ну так же сами и читайте .. потом иея какой-нибудь TTiffImage и рисуйте на канве Вашего грида...
     
  7. alexey

    alexey Гость

    Просто формат - скажем так, когда DBImage и им подобные сохраняют изображение в базе - то его формат отличается от формата - как правило добавляется заголовок и еще что-то, можно найти в исходниках думаю. Если же файл закачать напрямую - то компоненты часто отказываются его отображать. Хотя... - надо будет попробовать.
    А теперь проблема - компонент для отрисовки какой-то TiffImage требует в качестве исходника к примеру файл - значит надо выгружатть в файл - жутко при большом количестве файлов. Если же ему требуется поток - .... тоже надо попробовать.
     
  8. Barmutik

    Barmutik Гость

    Да как правило все такие компоненты имеют LoadFromStream ... я по крайней мере не видел такого что бы такого не было ...

    Или поищите нормальный компонент если у Вашего такого нет ...
     
  9. alexey

    alexey Гость

    Оп - готово!
    Правда на 95% но все же.
    Итак - главное направление поиска пошло от тебя.
    Я случайно вспомнил что действительно - когда я экспериментировал еще летом с Access, BDE, ADO и blob полями то обнаружил - в это поле можно загрузить файл напрямую и даже его потом отобразить - тем же DBImage - просто при чтении информации из blob поля там сначал идет проверка заголовка и если он не совпадает то делается попытка читать влоб - тем же TBitMap - ведь класс изображения неизвестен(хотя далеко я не лазил, и может и неправ). Поэтому можно спокойно ручками выдирать файлы и сохранять (впорчем в DBImage я тоже все грузил и выгружал руками - такая специфика), вот только при отображении надо объяснить как отобразить данное изображение. Тогда я обратился к работе DxGrid - логика следующая - по умолчанию, если не стоит св-во CustomGraphic - то она работает также влоб - через TBitmap. Но если его установить - то тогда начинает работать обработчик OnGetGraphicClass - он то и должен возвратить нужный графический класс, иначе опять TBitMap и приложение ложится в IDE - в безконечном цикле ошибок. Кажется просто - определить этот самый класс - вопрос как - сами разработчики DX предложили создать поле для этого в базе и хранить там string с именем зарегестрированного в приложении класса. Получать имя класса можно при загрузке изображения - через Image.Picture.ClassName, тогда все просто - берем из поля имя класса и даем его на TGraphicClass(GetClass()). Но не тут то было! Оказывается клас надо зарегистрировать и GraphicEx несмотря на работающую регистрацию делает это немного не так, как того требует система(кстати этот момент я до конца не понял - и что не нравится ей?) Без этого GetClass выдает просто nil. Итак озверев к тому времени (ибо прошло часов пять самых разнообразных экспериментов) я засунул ругистрацию непосредственно в файл проекта - до загрузки всех форм обычным RegisterClasses. Ну а далее все пошло и поехало. Читаю - смотрю, сохраняю, выгружаю. Приятно.
    Правда есть один глюк и кажется он в Dx - когда пытаюсь в одну гридину загружить несколько разных файлов по формату - вылетает с разнообразными ошибками через GraphicEx в тот же безеконечный цикл при отображении окна. Если же одновременно грузить фалы только одного формата - то все в порядке. Пока меня успокаивает тот факт - что по условию так все и будет работать, а будет время - надо будет разбираться далее. :unsure:
     
  10. Barmutik

    Barmutik Гость

    Удачи!
     
  11. alexey

    alexey Гость

    А еще сжатые фалйы также можно обрабатывать, но нужно раскомментировать GraphicConfiguration.inc - алгоритм LZV. Правда других алгоритмов вроде не поддерживается.
     
Загрузка...
Похожие Темы - Tiff файлы
  1. ildareshka
    Ответов:
    2
    Просмотров:
    3.865
  2. GROMILA
    Ответов:
    4
    Просмотров:
    4.048
  3. DNT
    Ответов:
    7
    Просмотров:
    5.128
  4. lmike
    Ответов:
    27
    Просмотров:
    295
  5. garrick
    Ответов:
    25
    Просмотров:
    664
Статус темы:
Закрыта.

Поделиться этой страницей