Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: CL | DM;

Вниз

Рисунки в директории   Найти похожие ветки 

 
XRMiPO   (2007-07-21 12:40) [0]

Подскажите, как сделать, чтобы в компоненте ShellListView или подобном, можно было отобразить уменьшенные копии рисунков в директории, как в проводнике.


 
Dib@zol ©   (2007-07-21 12:48) [1]

Уууу... Эт надо сначала загружать все рисунки, потом их уменьшать до нужного размера, желательно при этом ресэмплируя, а уже потом их выводить... С VCL-уровнем быстродействие выше чем 10 рис/сек тебе не светит. Тут АСМ нужен...


 
Dib@zol ©   (2007-07-21 12:52) [2]

Хотя в принципе можно проделать следующий финт ушами: В каждой папке где есть рисунки, практически всегда найдётся файл Thumbs.db, и если знать его структуру, то можно открыть уже готовые уменьшенные копии. Только эта самая структура мне неизвестна :(


 
XRMiPO   (2007-07-21 12:58) [3]

нашел, про структуру thumbs.db, правда мне ето неочень понятно)

Вообще это Structured Storage (см. MSDN), в котором есть индексный файл и файлы с маленькими жпегами (эскизами). Формат индексного файла, если не ошибаюсь, следующий:
Заголовок:
4 байта - всегда 0x00070010 (номер версии 7.10 скорее всего)
4 байта - число изображений
4 байта - ширина эскиза
4 байта - высота эскиза
Для каждого эскиза:
4 байта - длина данной записи включая это поле
4 байта - номер (имя) файла с эскизом
8 байт - дата/время файла (для контроля за изменениями) изображения
N байт - имя файла в юникоде.


 
Dib@zol ©   (2007-07-21 13:01) [4]

Ну и чего??? Читай через CreateFile/ReadFile!


 
XRMiPO   (2007-07-21 13:04) [5]

поподробней можно?)


 
Dib@zol ©   (2007-07-21 14:25) [6]

Ага.

procedure ReadDBFile(Name:string);
var
 F : HFILE;
 P : Pointer;
 S, K, B : Cardinal;
// ------------------------------------------------------- \\
procedure CopyMem(var Buf; shift, size:Cardinal);
begin
Move(pointer(cardinal(p)+shift)^, Buf, size);
end;
// ------------------------------------------------------- \\
begin
 F:=CreateFile(PChar(Name), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
 S:=GetFileSize(F, nil);
 GetMem(P, S);
 ReadFile(F, P, S, K, nil);
 K:=0;

 K:=4; // Пример
 CopyMem(B, K, SIZEOF(B)); // Пример

 FreeMem(P);
 CloseHandle(F);
end;

Вот процедура, наспех мною накорябанная. В "K" прописываешь смещение относительно начала файла, в байтах. Вызываешь CopyMem как показано ("B" не обязательно должно быть Cardinal) и читаешь, читаешь... Пока не наступит просветление :)


 
XRMiPO   (2007-07-22 10:56) [7]

Вроде все работает, только я же незнаю, как это дело использовать, для того, чтобы отобразить эти эскизы в ShellListView или подобном



Страницы: 1 вся ветка

Текущий архив: 2007.08.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1184900752
vegarulez
2007-07-20 07:05
2007.08.19
Вопрос: Как привязать процедуру (click) к созданной кнопке?


15-1184872920
@!!ex
2007-07-19 23:22
2007.08.19
Проблема с сетью.


2-1185025167
CatAlone
2007-07-21 17:39
2007.08.19
Drag and drop и extractfilename


15-1184767312
Kolan
2007-07-18 18:01
2007.08.19
Крег Ларман. А есть ли Case средстава для описаного в его книге?


4-1172494487
Unknown user
2007-02-26 15:54
2007.08.19
Как БЫСТРО подсчитать кол-во файлов в заданном каталоге?