Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение произвольных данных с BitMap'ом


Страницы:   1 2

RASkov ©   (2006-08-29 00:51:00) 

Здраствуйте. Подскажите как осуществить сохранение и потом (самое главное) загрузку такой вот структуры. Проблема с PICT. TData могу а PICT туда еще вписать не могу. Т.е. должно все в один файл записаться сначала данные Data а потом картинку из PICT. Что выделил жирным ясен пень неправильно - это я так для ясности написал.
Код ниже это только для примера у меня немного подругому но это неважно мне нужна суть как туда засунуть битмап и потом считать его. Можно даже както по байтам, что бы сохранить исходный формат. Картинка в основном маленького размера но может быть и приличная... но... думаю не более 200 кил. это если в *.bmp формате. При подключенном модуле JPEG, можно в переменную TBitMap загрузить jpg? Он наверное преобразовывается в формат bmp? Это не важно...

type TData = record
     Name: String[20];
     DInt: Integer;
     DBt: Byte;
     .....
    end;  
var Data: TData;
   PICT: TBitMap;

procedure TForm1.bbSaveClick(Sender: TObject);
var F: File;
begin
  if SvDlg.Execute then begin
   PICT:=TBitMap.Create;
   PICT.LoadFromFile('namefile');
   AssignFile(F, SvDlg.FileName);
   Rewrite(F,1);
   BlockWrite(F, Data.Name, SizeOf(Data.Name));
   BlockWrite(F, Data.DInt, SizeOf(Data.DInt));
   BlockWrite(F, Data.DBt, SizeOf(Data.DBt));
    BlockWrite(F, PICT, SizeOf(PICT));
  end;
end;

Собственно, приведите пожалуйста, пример сохранения а загрузку я думаю сам допру.


Ketmar   (2006-08-29 01:30:00) [21]

> [15] RASkov   (29.08.06 01:17)
используй потоки и не занимайся ерундой. %-)


Ketmar   (2006-08-29 01:29:00) [22]

> [13] Pavia ©   (29.08.06 01:13)
> Я потоки не люблю больно криво сделанны
обосновать. или не врать.


RASkov   (2006-08-29 01:17:00) [23]

> [13] Pavia ©   (29.08.06 01:13)

Спасибо.
Криво так криво, я и так попробую и так, а там... может че и получится.
Спасибо Pavia и Ketmar.


RASkov   (2006-08-29 01:16:00) [24]

> [6] Ketmar ©   (29.08.06 01:04)

try finally то я расставлю...
Спасибо. Остается только попробывать...


Pavia   (2006-08-29 01:13:00) [25]


> RASkov   (29.08.06 01:06) [7]

Да все верно.
Reset(f1,1) - не обязательно.
Я потоки не люблю больно криво сделанны. По этому предпочитаю, по старинки.


Ketmar   (2006-08-29 01:13:00) [26]

> [10] RASkov   (29.08.06 01:12)
да.


Ketmar   (2006-08-29 01:13:00) [27]

> [8] RASkov   (29.08.06 01:09)
а так и читать: ReadFromStream(). проверять реализацию лень, но не вижу, отчего бы ему не работать. %-)


RASkov   (2006-08-29 01:12:00) [28]

> [9] RASkov   (29.08.06 01:10)

А Pict как помом вычитать, отделить от моих данных, или.. если данные пишутся первыми то считав их, останеться Pict... так? что ли...


RASkov   (2006-08-29 01:10:00) [29]

> [6] Ketmar ©   (29.08.06 01:04)

Ну с Data я, грубо, разберусь...


RASkov   (2006-08-29 01:09:00) [30]

> [6] Ketmar ©   (29.08.06 01:04)

Блин... еще хитрей да и проще вроде.
pict.SaveToStream(fs); оно допишется после моих данных?
И ... щед... здесь неуказываються размеры, а как потом читать?


RASkov   (2006-08-29 01:06:00) [31]

> [4] Pavia ©   (29.08.06 01:01)

Блин, хитро... f1 - это файл с картинкой, а f мой, так?
Попробую,... а Reset(f1) не надо так делать Reset(f1,1);?
И наверное перед BlockWrite(f,buf^,SizeOf(f1)); надо записать сам размер SizeOf(f1) ну для того что бы считать потом из моего файла. Правильно мыслю?


Ketmar   (2006-08-29 01:04:00) [32]

fs := TFileStream.Create('outfile', fmCreate);
fs.WriteBuffer(data, SizeOf(data)); // или ещё как
pict.SaveToStream(fs);
fs.Free();


как упражнение -- расставить в нужных местах try/finally. %-)


Ketmar   (2006-08-29 01:03:00) [33]

> [4] Pavia ©   (29.08.06 01:01)
это что такое???


Pavia   (2006-08-29 01:01:00) [34]

Зачем TBitmap сохронять.
Открой файл и запиши его через
AssignFile(f1,'name');
reset(f1);
GetMem(buf,SizeOf(f1));
BlockRead(f1,buf^,SizeOf(f1));
BlockWrite(f,buf^,SizeOf(f1));
FreeMem(buf);
CloseFile(f1)


RASkov   (2006-08-29 00:59:00) [35]

> [2] Zeqfreed ©   (29.08.06 00:57)

Можно поподробней. Со Стримами так мало работал...
Как Стрим с Битмапом дописать в мой файл и... потом его оттуда загрузить..ну это потом.


Zeqfreed   (2006-08-29 00:57:00) [36]

Самое простое сохранять битмап в стрим и стрим писать в файл.
См. TStream, TBitmap.SaveToStream.


Pavia   (2006-08-29 00:55:00) [37]

CloseFile(f);
Or Flush(f);


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо