Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.064 c
10-1135653699
Bratskiy
2005-12-27 06:21
2007.08.19
Поиск жирного шрифта в word


15-1184749301
Коллер
2007-07-18 13:01
2007.08.19
веб 2.0 и доткомы


1-1180368669
Dmitry_177
2007-05-28 20:11
2007.08.19
Перехват клавиатуры


15-1184688693
Riply
2007-07-17 20:11
2007.08.19
Первая проба пера


15-1184769735
Иксик
2007-07-18 18:42
2007.08.19
Молдавия спасена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский