![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение произвольных данных с BitMap'ом
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);