powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Image Preview (tiff) с использованием API
25 сообщений из 31, страница 1 из 2
Image Preview (tiff) с использованием API
    #35821062
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая фишка, когда смотришь папки в виндах. Details (priview). Т.е. слева внизу(или режим когда вместо иконки) отображается миниатюра картинки. Что там используется? Т.е. хочу отобразить картинку на форме. Для jpg-bmp проблем конечно нет, но т.к. работаю с tiff, то стандартные Image-Picture не проходят. Можно конечно использовать библиотеки из Kodac Imaging, но вариант неразумный, ибо официально это в системах не поддерживается со времен 98 видов, смотрел в направлении Preview 1.0 Type Library (просмотр изображений и факсов). Оно? В принципе можно добавить элемент на форму, но элемент невменяемый и практически неизлечимо неуправляемый, т.е. м.б. и оно, но подходить надо к shimgvw.dll как то иначе м.б. через API.
API там внутри не очень много:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
         9      0  000200EE ConvertDIBSECTIONToThumbnail
          10      1  000187BC DllCanUnloadNow
          11      2  00019D94 DllGetClassObject
          12      3  00018B1D DllInstall
          13      4  0001A9E7 DllRegisterServer
          14      5  0001AA6A DllUnregisterServer
           1      6  00005F0A ImageView_COMServer
           2      7  0000B888 ImageView_Fullscreen
           3      8  0000B96D ImageView_FullscreenA
           4      9  0000B9C2 ImageView_FullscreenW
           5     A 0000BA6F ImageView_PrintTo
           6     B 0000BB4F ImageView_PrintToA
           7     C 0000BBA4 ImageView_PrintToW
           8     D 0000B9C2 imageview_fullscreenW
С ImageView_Fullscreen все и так ясно, оно через rundll32 просто запускает "программу просмотра", м.б. DllGetClassObject.. но это нужны примеры,2 года назад я на это забил...

М.б. и она используется... Есть идеи? gdi32.dll? gdiplus? Надо понять куда копать, дальше дело поиска. Ну, платные немайкрософтовские контролы мне принципиально не интересны. Только системные средства.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35822523
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Preview 1.0 Type Library в принципе неплохой вариант.
Добавляем на форму Preview1
Далее делается нек. хитрость.
Preview1 размещаем в рамке Frame и уменьшаем размеры рамки так, чтобы скрыть края Preview1 и нижнюю часть (где отображаются стрелки). Для Frame1 делаем enabled=false, ибо у preview это свойство отсутствует а всякие меню нам не нужны.

При желании можно исрпользовать функции:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
'загрузить картинку
Preview1.ShowFile "test.tif",  1 
'отобразить в натуральную величину
Preview1.ActualSize
'вписать в рамку
Preview1.BestFit
'размеры картинки
MsgBox Preview1.cxImage & "x" & Preview1.cyImage
'увеличить
Preview1.Zoom  1 
'уменьшить
Preview1.Zoom - 1 

Загадкой остается:
Код: plaintext
1.
2.
Class IImgCmdTarget
    Member of PREVIEWLibCtl
    IImgCmdTarget Interface
предоставляющий полезные ф-ции
Код: plaintext
1.
2.
NextPage
PreviousPage
Rotate
Но как привязать этот класс к
Class Preview
я не понимаю.
Google ничего не дает, кроме понимания того, что не я один мучаюсь этим вопросом.
Может взглянет кто из спецов...
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35823056
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максимум чего удалось сделать "нестандартного"
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Command9_Click()
Dim a As PREVIEWLib.IPreview3
    Set a = New PREVIEWLib.Preview
    'устанавливает как обои рабочего стола
    a.SetWallpaper "c:\111\test.jpg"
end sub
и это только после добавления в references, в components это не работает

Код: plaintext
a.Show "C:\111\test.tif"

не ругается, знать бы куда оно пытается это показать, объект есть, а его не видно...
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35989317
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77Preview 1.0 Type Library в принципе неплохой вариант.
Добавляем на форму Preview1
Далее делается нек. хитрость.
Preview1 размещаем в рамке Frame и уменьшаем размеры рамки так, чтобы скрыть края Preview1 и нижнюю часть (где отображаются стрелки). Для Frame1 делаем enabled=false, ибо у preview это свойство отсутствует а всякие меню нам не нужны.


Хитрость про которую вы написали можно решить одним свойством элемента Preview1. Всего то поставить CausesValidation=False и все.

Но в Access этого свойства нет, может сможете подсказать как можно решить эту проблему в Access.
Задавал этот вопрос на многих форумах, в том числе и на этом в разделе Access, никто ничего пока не присоветовал.

Дело в том что у меня на форме много элементов Preview, 15 штук. конечно можно было бы сделать как вы советуете, но в Access рамка не может быть меньше объекта помещенного в нее, да и отображается она там на заднем плане относительно Preview.

Может будут какие нибудь соображения по этому поводу.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35992836
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я поиграюсь попозже. Сейчас занят "правами доступа к папкам" на висте. Если приложение узкого использования и это XP/2003 то можете попробовать Kodac Imaging "для XP", поищите в google, там есть соотв.элемент для отображения картинок.
Но если вы захотите перенести ваши идеи в висту, то ничего не выйдет, ибо тамошний "Фотоальбом" с VB похоже в этом плане вообще не совместим.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993032
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по идее надо "прикрыть" нижнюю часть каким либо другим элементом "под цвет фона", прыгает там все только, надо экспериментировать, не иначе.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993396
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dado,
а как формулируется задача в более широком смысле, если отвлечься от использования конкретного элемента управления?
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993718
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Данная часть задачи состоит в отображении (типа предварительно просмотра) графических файлов, в том числе и tif формата.
Дмитрий77 предложил использовать Kodac Imaging, попробую его, может получиться.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993730
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Более того показывать необходимо все картинки из набора (до 15 штук) за раз, без прокруток и выбора изображения для показа (например из списка).
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993847
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DadoДанная часть задачи состоит в отображении (типа предварительно просмотра) графических файлов, в том числе и tif формата.
Дмитрий77 предложил использовать Kodac Imaging, попробую его, может получиться.Вот это смотрели?DadoБолее того показывать необходимо все картинки из набора (до 15 штук) за раз, без прокруток и выбора изображения для показа (например из списка).Что такое набор, чем он определяется?
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993864
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Набор это все условно, а определяется он количеством дополнительных видов для изделия.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35993920
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Намек понятен, конвертация в "удобочитаемый" формат.

Конечно это решение, но на мой взгляд было бы проще отображать как есть на данный момент, только пока не получается спрятать кнопки перехода и поворота изображений:(, к сожалению.

Почитаю. А может и придется применить, если не решиться моя задача.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35994117
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dado,
ну, прикрыть сверху можно оконным элементом управления, подформой, например.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #35995559
Dado
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БенедиктDado,
ну, прикрыть сверху можно оконным элементом управления, подформой, например.

Да, в принципе это вариант. Наверное так и сделаю. На данный момент это проще всего.

Спасибо за помощь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Image Preview (tiff) с использованием API
    #38182089
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77
Код: vbnet
1.
2.
3.
4.
5.
6.
         10    1 000187BC DllCanUnloadNow
         11    2 00019D94 DllGetClassObject
         12    3 00018B1D DllInstall
         13    4 0001A9E7 DllRegisterServer
         14    5 0001AA6A DllUnregisterServer
 


...м.б. DllGetClassObject..


Эти 5 функций нужны для работа с COM-сервером dll. В этой, например, есть только один класс: {50F16B26-467E-11D1-8271-00C04FC3183B}: Preview . И в этом классе есть несколько функций, которые тоже можно использовать:

ShowFile(BSTR bstrFileName, int iSelectCount);
printable([out, retval] long* pVal);
printable([in] long pVal);
cxImage([out, retval] long* pVal);
cyImage([out, retval] long* pVal);
Show(VARIANT var);
Zoom([in] int iSelectCount); //zoom the image
BestFit(); //fit image to window
ActualSize(); //show image at actual size

так что, DllGetClassObject - точно не та функция...
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38182166
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На этом сайте всё про dll написано:
http://xpdll.nirsoft.net/shimgvw_dll.html
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38182245
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maksim32,

Ну, здрасьте приехали - не прошло и 5-ти лет.
Давно уже использую GDI+/- для таких штук.

Вот если б ты объяснил как делать всякие отображения для PDF (или SFF -предвижу вопрос а что это такое, ладно ограничимся PDF) - в своей программе - без использования платных глюко-контролов (контрол от акробата тоже глюко), то это было б интересней. Потому как использую конвертацию PDF(SFF)->TIFF через libtiff и еще одну штуку, и отображаю таки TIFF через GDI, а это таки секундная задержка + всякий tmp-мусор.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38182250
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственно, что я взял на вооружение, так это команду
Код: vbnet
1.
rundll32 shimgvw.dll,ImageView_Fullscreen


универсальную для всех OS, будь там под ней фотогалерея или "программа просмотра".
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38183006
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

Стандартных средств для отображения PDF (тем более SFF) в Windows нет, так что без сторонних библиотек или программ точно не обойтись, ну, или самому в стуктуре этих файлов разбираться, но мне кажется, это бред.
Есть прога IrfanView, она много разных типов изображений открывает, в том числе и PDF с SFF, у неё можно результат стащить; чтобы пользоваться надо ещё Ghostscript (12,1Мб) поставить и плагин Postscript.dll, но, честно говоря: способ далеко не из лучших)...
Это нужно для сервера, или для себя прога, для чего в ней картинка из PDF?
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38183131
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maksim32, ну, или самому в стуктуре этих файлов разбираться, но мне кажется, это бред.
Бред не бред но в структуре SFF я как раз очень даже разобрался, по крайней мере на предмет как их делать ->GDI+/- >> Bitmap >> SFF тупо как написано в CAPI 2.0 документации.
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
C PDF в моем случае если уж очень захотеть, то м.б. будет даже проще - у меня все PDF простого формата - с загнанной туда N-страничной картинкой (преобразованием из TIFF через libtiff) и ничего больше.

maksim32, Есть прога IrfanView, , у неё можно результат стащить; чтобы пользоваться надо ещё Ghostscript (12,1Мб).
А, сорри, я так и делаю
maksim32, Потому как использую конвертацию PDF(SFF)->TIFF через libtiff и еще одну штуку, и отображаю таки TIFF через GDI
Ток здесь ошибся, не libtiff (который TIFF->PDF), а как раз Ghostscript (PDF -> TIFF) и sff2bmp проект (SFF -> TIFF) -это кот. еще одна штука. И скажи, зачем мне тогда IrfanView кот. этот же Ghostscript использует, не говоря о том что есть в Ghostscript есть API VB6-совместимые, кот. я как раз и использую.

maksim32, Это нужно для сервера, или для себя прога, для чего в ней картинка из PDF?
Это используется в моей проге (кот. не для себя и не для сервера, а на продажу). И пока там сделано так как написано выше с прицепом из Ghostscript-ов и прочего, ну маскируем ес-но.

Но скажем так, мой собственный конвертер TIFF -> SFF, ссылка на кот. выше не быстрее Ghostscript, кот. умеет делать то же самое, так что думаю что проще оставить как есть и не тратить время, потому как с другими преобразованиями- отображениями (если делать самому и т.д.)- боюсь будет та же песня, т.е. куча моего потраченного времени, и никакого выигрыша по времени в программе. 9MB (если выкинуть из GS лишнее при компиляции) -это не та проблема.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38184855
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77И скажи, зачем мне тогда IrfanView кот. этот же Ghostscript использует...
Согласен, можно его и на прямую использовать, главное знать как
Дмитрий77Бред не бред но в структуре SFF я как раз очень даже разобрался...
Ну, конечно же, если оч нужно, то можно и разобраться)). Я имею ввиду как раз сделать всё с нуля, но Дмитрий77...делать все самому с нуля, это вообще темный лес.

White OwlОт промежуточного битмапа не уйти Если не использовать только стандартные средства, то это довольно неплохой вариант... На C++ он и вправду выглядил бы неплохо
Дмитрий77Проще Ghostscript таскать, тем более итак таскаю...
GS эти 52 страницы конвертит за 3 !!! секунды.
Ну так если его и так таскать приходится, то это неплохой вариант, к тому же скорость неплохая)
Как вариант, можно самому собрать API-dll на C/C++ с теми функциями, которые неоптимальны в VB, со скоростью помочь должно)
Дмитрий77думаю что проще оставить как есть и не тратить времяНаверное, вы правы)

Дмитрий77куча моего потраченного времени, и никакого выигрыша по времени в программе.
Но работа и вправду проделана не малая!, очень жаль, что у вас не вышло ожидаемого результата..
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38184858
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нужно, я для создания API-dll пользовался этим шаблоном, а компилировал MinGW, работает нормально; если этот код скомпилировать - получится 25599 байт.
#include <windows.h>
#include <fcntl.h>

// API-header
#define BUILDING_EXAMPLE_DLL
#ifndef EXAMPLE_DLL_H
#define EXAMPLE_DLL_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef BUILDING_EXAMPLE_DLL
#define EXAMPLE_DLL __stdcall __declspec(dllexport)
#else
#define EXAMPLE_DLL __stdcall __declspec(dllimport)
#endif
// export functions
unsigned int EXAMPLE_DLL str_len(const char *ss); // количество символов в строке

#ifdef __cplusplus
}
#endif
#endif

// Main Api Dll Header
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved){
switch(fdwReason){
case DLL_PROCESS_ATTACH:break;
case DLL_THREAD_ATTACH:break;
case DLL_THREAD_DETACH:break;
case DLL_PROCESS_DETACH:break;
};
return TRUE;
}

// functions to API

unsigned int EXAMPLE_DLL str_len(const char *ss){
return strlen((const char*)ss);
}
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38185679
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot maksim32]Дмитрий77Ну, конечно же, если оч нужно, то можно и разобраться)). Я имею ввиду как раз сделать всё с нуля, но Дмитрий77...делать все самому с нуля, это вообще темный лес...
Там не с нуля сделано. С нуля - это имея только описание алгоритма на словах и все.
А когда смотришь в какие-то коды - пусть в сишные, то это уже не совсем с нуля. Я смотрел в коды sff2bmp (sfftools) и того же GS.
maksim32Дмитрий77куча моего потраченного времени, и никакого выигрыша по времени в программе.
Но работа и вправду проделана не малая!, очень жаль, что у вас не вышло ожидаемого результата..
Почему же, результат достигнут полностью. И код этот я в своей программе местами использую (наряду с GS).
А по поводу времени, основную причину же нашли:
12737039 Т.е. проблемы скорости VB6 на конкретном действии.
maksim32Дмитрий77Проще Ghostscript таскать, тем более итак таскаю...
GS эти 52 страницы конвертит за 3 !!! секунды.
Ну так если его и так таскать приходится, то это неплохой вариант, к тому же скорость неплохая).
Чтоб мне не таскать GS, надо уметь конвертировать ПРОИЗВОЛЬНЫЕ PDF -> TIFF
Даже если я на пальцах научусь выковыривать картинки из тех PDF, которые создаю сам через libtiff (см. выше, где я писал про отображение PDF на форме), то это все равно не решит задачу конвертирования произвольного pdf (где кроме картинок еще и текст, и черт знает что еще, а при этом текст еще в разных кодировках итд итп.) И если такой конвертер писать самому, то это годы, и вряд ли размер файла будет меньше размера GS.
Поэтому прикрутил и ладушки.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38186087
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maksim32Если нужно, я для создания API-dll пользовался этим шаблоном, а компилировал MinGW,...
Я вашу мысль не совсем понял.
Но, насколько я знаю, MinGW это баа-льшой прибамбас, кот. позволяет под винды запускать коды которые к этому ну никак не адаптированы. Пример такого проекта
AsteriskWin32
-реализация идиотская, функционал зарезан и как несложно догадаться по сайту, проект давно умер и востребован не был.

Те решения, кот. я использую имеют native поддержку для Win32.

И если таскание GS в чемодане в целом оправдано (даже с учетом его размера), то таскать в этом чемодане MinGW точно ни в какие ворота не вписывается.
...
Рейтинг: 0 / 0
Image Preview (tiff) с использованием API
    #38186360
maksim32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В моём случае, MinGW - это компилятор для C++ (портированный gcc), про него я вычитал в сравнительном анализе компиляторов C++ , им и пользуюсь. Он и не только для Win32 есть, но другие меня не интересовали. И таскать компилятор с собой не нужно, им только DLL сделать, если это поможет делу)
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Image Preview (tiff) с использованием API
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]