Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Размер файла


Автор: Nightwish 9.3.2004, 14:42
Здравствуйте.

Возможно ли узнать размер изображения который находится в image?

Автор: Nightwish 9.3.2004, 14:49
Забыл уточнить.

Размер файла находящийся в image.

Автор: serious 9.3.2004, 15:20
What?

Автор: Unregistered 9.3.2004, 15:39
Nightwish
Бери высоту, ширену и глубину цвета и все это перемножай

Автор: Cashey 9.3.2004, 15:43
Запоминаешь файл при присвоение, и при помощи FileSize(f) определяешь его размер

Автор: Alex 9.3.2004, 16:04
Код
function GetFileSizeByte(FileName :String) :Int64;
// Размер файла в байтах
{$IFDEF MSWINDOWS}
var
 Handle: tHandle;
 FindData: tWin32FindData;
begin
 Handle := FindFirstFile(PChar(FileName), FindData);
 if Handle = INVALID_HANDLE_VALUE then
   RaiseLastOSError;

 Windows.FindClose(Handle);
 if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
   Result := 0  // Размер каталога всегда считаем равным 0
 else begin
   Int64Rec(Result).Hi := FindData.nFileSizeHigh;
   Int64Rec(Result).Lo := FindData.nFileSizeLow;
 end;
end;
{$ENDIF}
{$IFDEF LINUX}
var
 st: TStatBuf;
begin
 if stat(PChar(FileName), st) = 0 then
   Result := st.st_size
 else
   Result := -1;
end;
{$ENDIF}



Автор: Kesh 10.3.2004, 00:47
alex-co по-моему Nightwish спрашивает размер файла уже загруженного в TImage...

Др. Nightwish размер файла определить трудно, т.к. в TImage он хранится в TBitmap, но на жесткий диск может сохраняться в различных форматах, каждый из которых имеет свою кодировку изображения, и соотв. занимает разное место... Даже TBitmap, сохраненный в LengthEncoding занимает меньше места, чем чистый Bitmap...

Будь добр, уточни для каких целей тебе необходимо определить размер файла, тогда проще будет тебе помочь...

Автор: Nightwish 10.3.2004, 01:47
Да действительно мне нужен размер файла уже загруженного в Image.
Функция FileSize тут не подходит, т.к. файл мне сохранять не нужно, а нужно узнать сколько весит картинка загруженная в Image из буфера.

Автор: Nightwish 10.3.2004, 01:50
Т.е. файла как такого ещё нет, но нужно узнать если его сохранить сколько будет весить.

Автор: Alex 10.3.2004, 07:24
kesh поясни, что такое LengthEncoding. На сколько отличается реальный размер bmp от того, который возвращает LengthEncoding?

Автор: Kesh 10.3.2004, 13:49
alex-co Ну смотри. Обычный bmp кодируется как есть bit map, т.е. сохраняются цвета для каждого пиксела, соотв. размер файла есть height*width*1(3)byte_per_pixel+HeaderSize, где (1 - GrayScale (серый), 3 - RGB). Пиксельное поле кодируется по строкам, начиная с нижней. Т.е. картинка загружается снизу-вверх, слева-направо... (ИМХО классная задумка для порносайтов - загружать картинки снизу wow.gif wow.gif wow.gif)
LengthEncoding действует по-другому... Он записывает битовое поле так: Сейчас 1 пиксель цвета FFFFFF, затем три пиксела цвета FFCCFF, потом еще 2 пиксела цвета FFFFFF и т.д. т.е. идет примерно так 01FFFFFF03FFCCFF02FFFFFF и т.д. На немногоцветных рисунках это дает неплохие результаты. Кстати, если не ошибаюсь, примерно также действует gif...

P.S. Перечитал и сам себя не понял... Если ты тоже не понял - пиши, попытаюсь объяснить доходчивее...

Автор: p0s0l 11.3.2004, 22:31
Не, гифы по-другому, там LZW (или как там называлось, уже толком не помню), посложнее на порядок метод... Но это уже оффтопик...

Цитата
Функция FileSize тут не подходит, т.к. файл мне сохранять не нужно, а нужно узнать сколько весит картинка загруженная в Image из буфера.

1) А при загрузке из буффера нельзя запомнить размер в переменной или в Image1.Tag ?
2) Если же писать на диск нельзя - пиши в память (в TMemoryStream), метод у Bitmap'а SaveToStream...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)