(Назад к списку заданий eCo Labs)

Название: Preview.dll
Заказчик: eCo Software


Срок: -
Вознаграждение: -

2010/03/24 - разные вопросы

  • Картинки: можно из EA, но если там нет, то генерировать preview? записывать в EA? а если долго строить картинку? то preview.dll откажется? по размеру файла ограничивать? или по WxH * формат?
  • все-таки юзать IO Proc? или libpng, .. IO Proc => усилит ОС, зато libpng (наверное) надежнее
  • еще были вопросы..
  • Примем такую модель: preview.dll - это получение готовых данных.
    • т.е. если STL, то генерировать весь 3D объект не надо. Подгрузить превью, если там есть.
    • Если .tiff 20 Mb, то ?!
    • Если JPG 5 Mb, то .. ?!

2010/03

e-co: Еще раз, preview.dll - заполняет структуру с описанием документа (картинка, пары текстовых срок). Также полезна и WC_PREVIEW.

WC_PREVIEW - наверное предложение Glassman - тут ОК.

Что делает preview.dll?

Пример:

  • картинка,
  • GetInfo(%путь_к_файлу%) детектит тип. PREVIEW_BITMAP
  • значит будем заполнять структуру BITMAP_DATA
  • берет картинку (из EA или загружает превьюшку с помощью IO Proc)
  • кладем в BITMAP_DATA картинку тумбнейл
  • кладем в BITMAP_DATA пары строк: "Size of image" + "256x512"
  • кладем в BITMAP_DATA пары строк: "Format" + "JPG"
  • ..
  • Все.. готово
  • Возвращает: тип: PREVIEW_BITMAP => значит дальше идет структура про BITMAP.

Пример:

  • OpenOffice-документ,
  • GetInfo(%путь_к_файлу%) детектит тип. PREVIEW_OPENOFFICE_OXML ??
  • значит будем заполнять структуру BITMAP_OPENOFFICE_OXML
  • берет картинку (PNG из .doc)
  • кладем в BITMAP_DATA картинку тумбнейл
  • кладем в BITMAP_DATA пары строк: "Size of file" + "57 620 bytes"
  • кладем в BITMAP_DATA пары строк: "Объем документа" + "33 страницы"
  • кладем в BITMAP_DATA пары строк: "Format" + "DOC"
  • ..
  • Все.. готово
  • Возвращает: тип: PREVIEW_OPENOFFICE_OXML => значит дальше идет структура про OPENOFFICE.

e-co, 20100222

все-таки использовать ли IO Proc для превью картинок?

  • сейчас Glassman читает из EA
  • а если EA нет? а если юзер хочет более качественное превью?

=> и тут же идея: вынести в сетап:

  • PIC_только EA = да/нет
  • PIC_генерить с помощью IO Proc = да/нет
  • PIC_black list IO Proc: ... // пример: PSD, GIF

2009/12

можно обсудить техн.задание! главная идея - нужно чтобы preview.dll можно было использовать в разных программах (чтобы быстрее отладить + улучшить ОС)

  • как все это выглядит? preview.dll + preview_bitmap.dll + preview_pdf.dll + preview_openoffice.dll + ..
  • GetPreview1(путь_к_файлу)
    • // потом будут новые версии функции
    • dll сама определяет формат
    • тип документа: BITMAP, OFFICE, PDF, ..
    • заполняет структуру (BITMAP_STRUCT, PDF_STRUCT, ..): a) bitmap, b) пары строчек: название поля, значение поля
  • программа, которая пользуется preview, сама разбирает тип документа и сама рисует битмап и пары строчек.

Дополнения:

  • Пример пары строчек: "Size of image" + "256x512" или "Объем документа" + "33 страницы"
  • Зачем отдельные dll? чтобы разработчики сами отлаживали. несколько разработчиков.

Создать демо-программки:

  • чтение картинки. откуда превью? IO Proc в принципе надежны на 99%, но можно EA (уже есть для FOC)
  • чтение PDF (из EA)
  • OpenOffice - там внутри есть PNG с превью, а вообще к OpenOffice есть примеры, как читать описание документа.
  • можно сделать mp3_preview - показывать мета-тэги

Разное:

  • как настраивать preview? отдельный глобальный конфиг ИЛИ каждая программа сама может настроить? (Пример: превью картинок из EA <> использовать IO Proc)

Glassman, Ответ 2009/12

2. ? подробнее про превью. Я представляю себе это примерно так:

архитектура такая:

1. Есть контрол WC_PREVIEW. Техническое устройство его пока обсуждать не будем. Когда ему нужно отобразить превью для какого то файла, он ищет в реестре строчку вроде тех, как сделано в PMWP_ASSOC_FILTER. Т.е. key - маска файла, значение - имя dll. Найдя, он грузит эту dll, и вызывает ей некоторую функцию, ePreview, например. Функции передается имя файла, и некоторая структура, которую она должна заполнить, ну, к примеру:

struct PREVIEW {
   ULONG cbSize;
   ULONG fl;
   SIZEL szImageSize;
   ULONG handle;
   CHAR  info[128];
};

DLL формирует изображение заданного размера (или меньше) и возвращает его хэндл. Соответственно, handle может быть HBITMAP, HBITMAP2, HPOINTER... WC_PREVIEW отрисовывает картинку и текст и берет на себя заботы по последующему освобождению хэндла.

e-co: ДА, только поправка: строчка не одна, а их может быть N пар.

Хранение в EA - невозможно. Вообще кэширование невозможно. Либо мы тогда должны задать фиксированный размер всем превьюшкам, чего не хотелось бы.

Я не могу никак понять, зачем мне preview dll, которая вместо картинки возвратит мне PDF? 0_o

e-co: картинки отдельно. pdf_preview - возвратит картинку + текст.


=== 2009 ===

3) можно ли вывести в отдельные dll: детект типа файла. и превью - для каждого типа файла в отдельном dll.

Glassman:

  • Ну до превью когда доберемся - будем думать конкретно. Пока я склоняюсь к мысли - что да, генераторы превью будут в виде плагинов, который сможет зарегистрировать любая программа. А кэшироваться эскизы будут уже WC_PREVIEW в EA.
  • Желательно EA совместить с PMView и Lucida (она же тоже там вроде хранит?)

e-co: ну вот проблема.. для иконок 90-х годов в EA есть место. а pdf тумбочки туда не помещаются, т.е. ничего не видно на таких превью.

Glassman: да без разницы. Зачем нам использовать в EA .ICON, мы можем использовать свой .PREVIEW

2009/07

=== Preview.dll ===

Для нескольких проектов нужна dll детекта типа файла + preview + load/save metadata
* для Glassman, FileOpenContainer - нужно для превью файлов
* для prokushev, Imagination - нужно для превью документов (-//-)
* для ntim, e-co: для Categorize (load/save metadata)


1) во-первых, давайте сделаем набор dll:
* dll детекта
* dll для каждого типа файлов


2) интерфейс: 

a) 
хэндл = QueryFileType (полный путь к файлу)
*

b) 
PreviewDocument(хэндл, параметры области, в которой отрисовать документ)
* if нет превью, то показывать превью дефолтное

??????? ааа..
а если рисование очень долгое?
и нужно Preview вызывать десятки раз?
Где хранить загруженную картинку? Где хранить смасштабированную картинку?

c) 
* ? а если превью





Вознаграждение:

  • обсуждается

Сроки:

  • разработка: -
  • суппорт: -

Права:

  • обсуждается

 

Абстрактное: цель:

Конкуренты

FOC 1, FOC 2 FOC Gimp