Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 13:56   #11
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Спасибо (+1), там всё понятно, а теперь как сделать: есть на форме 3 картинки загруженые в image1, как по нажатию кнопки сохранить их в тот формат что мы создали, а потом его открыть?

Последний раз редактировалось blackstersl; 03.08.2009 в 13:58.
blackstersl вне форума Ответить с цитированием
Старый 03.08.2009, 14:01   #12
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Подожди секунду.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 14:12   #13
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
сохранить их в тот формат что мы создали
Пока никакой формат мы не создали, мы только зарегистрировали расширение в системе. А формат сначала нужно придумать. Подумай что тебе от него нужно, для примера просто сохранять последовательно несколько картинок. Тогда заголовок будет весьма простой - кол-во картинок, размер их и позиции откуда они начинаются, если они идут последовательно и других данных в файле нет, то можно позиции не указывать.
1. Создай поток: fs:=TFileStream.Create(... почитай сам как это делается);
2. Запиши заголовок файла: fs.Write(.. аналогично);
3. Потом пиши туда файлы: способов несколько, самый простой грузи их тоже в поток (fs2) а потом копируй в этот fs.CopyFromStream(fs2) //с точным именем функции могу ошибиться.
4. Закрой поток: fs.Free; Все, файл сохранен.
Чтение в обратном порядке. Читается заголовок, и затем копируются нужные части файла (последовательности байт).
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 03.08.2009, 14:26   #14
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Вот все же тоже самое что сказал mutabor, только в исходнике - это только запись файла - я предположыл, что файлы не в одном image, а в нескольких.

Должно работать не проверял.
Файлы сохраняются последовательно - перед каждым файлом записываю его размер - чтобы потом можно было прочитать их. Если надо будет исходник чтения - обращайся.

Код:
procedure TForm1.Button2Click(Sender: TObject);
 var fs : TFileStream; i:integer;
 imgSize: int64;  sizePos: int64; img: TImage;
begin
  fs:=TFileStream.Create('E:\myfile.ext',fmCreate); //Создаем файловый поток и
  //сразу создаем файл с нужным разширением.
  imgSize:=0;
  sizePos:=0;
  //Цыкл По картинкам
  for i := 1 to 3{оличество картинок}do
    begin
    //Получаем очередной Image
    img:=TImage(Form1.FindComponent('image'+intToStr(i)));
    SizePos:=Fs.Position;    //сохраняем позицию в файле, куда надо записать размер
    fs.Write(imgSize,SizeOf(imgSize)); //резервируем пару:) байт для размера
    //Дальше записываем картинку
    //В зависимости какая картинка - если bmp - то
    Image1.Picture.Bitmap.SaveToStream(fs);
    //а если Jpg - то
    // image1.Picture.Graphic.SaveToStream(fs);
    ImgSize:=fs.Position-sizePos;  //вычисляем размер картинки
    Fs.Seek(SizePos,SoFromBeginning);  //Возвращаемся к тому месту, куда надо записать размер
    fs.Write(imgSize,SizeOf(imgSize));  //записывем
    Fs.Seek(0,SoFromEnd)         //Возвращаемся в конец файла
    end;
  fs.Free;
end;
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:25   #15
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

спасибо большое -) я бы не разобрался. А таким же образом открывать?
blackstersl вне форума Ответить с цитированием
Старый 03.08.2009, 18:34   #16
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Да. Сначало читаеш в переменную Int64!!!!! размер картинки - дальше сохраняеш читаеш саму картинку. Кстати как это сделать. Создай переменную:

Код:
var
  ms: TMemoryStream;
...
...
Читаем размер картинки
...
ms.clear; //чистим от предыдущих итераций цыкла
ms.CopyFrom(fs,imageSize); //копируем из файлового потока в мемори поток картинку
ms.position:=0; //!!!!!
Image1.Picture.Bitmap.LoadFromStream(ms); и тогда из мемори в Image
Тока не забудь потом удалить ms.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:34   #17
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Забыл дописать: и так дальше)))))))))
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 18:54   #18
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Огромнейшее спасибо!!!! Вообщем начало оставить как есть, а потом начать ms.clear;

Последний раз редактировалось blackstersl; 03.08.2009 в 19:08.
blackstersl вне форума Ответить с цитированием
Старый 03.08.2009, 18:58   #19
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Всегда пожалуйста!
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 19:26   #20
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

А я что-то не понял как читать файл потом... (работаю с JPEG)

Последний раз редактировалось The Best; 03.08.2009 в 19:38.
The Best вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание своего архиватора kuzmich Общие вопросы Delphi 9 08.01.2009 06:17
создание своего формата данных CyberOrcX Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 02.12.2008 17:36
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28
Проблемы расширения базы нужен скрип serg-php PHP 10 10.02.2008 19:15
Создание своего формата AnaSha Microsoft Office Excel 1 09.01.2007 16:20