![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запись/чтение Bitmap+текстовое описание в файл [D7]
Валя © (2015-12-04 21:31:00)Нужно реализовать файл специфического формата:
секция1: картинка bmp;
секция2: текстовое описание;
секция3: маленькая иконка для кнопки, по клику которой и будет открывать bitmap с описанием.
Подскажите как ето все реализовать с одним файлом
Лори (2015-12-25 03:02:00) [1]> Use TFileStream, Luke!
ам... Имелось ввиду TFileStream.WriteComponent() ? Оно и картинку сожрёт? %)
aka (2015-12-05 12:37:00) [2]ms.Position := 0;
Image3.Picture.Bitmap.LoadFromStream(ms);
Валя (2015-12-05 11:47:00) [3]Не читается картинка в Image3, как ее правильно вытягивать из MemoryStream
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ImgList;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetGraphicSize(g: TGraphic): Integer;
var
ms: TStream;
begin
ms := TMemoryStream.Create;
try
g.SaveToStream(ms);
Result := ms.Size;
finally
ms.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f: TFileStream;
size1, size2: Integer;
begin
f := TFileStream.Create('1.dat', fmCreate);
size1 := GetGraphicSize(Image1.Picture.Graphic);
size2 := GetGraphicSize(Image2.Picture.Graphic);
f.Write(size1,4);
f.Write(size2,4);
Image1.Picture.Bitmap.SaveToStream(f);
Image2.Picture.Bitmap.SaveToStream(f);
f.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ms: TStream;
f: TFileStream;
size1, size2: Integer;
begin
f := TFileStream.Create('1.dat', fmOpenRead);
f.Seek(0, soFromBeginning);
f.Read(size1,4);
f.Seek(4, soFromBeginning);
f.Read(size2,4);
f.Seek(4+4+size1, soFromBeginning);
ms := TMemoryStream.Create;
ms.Seek(0, soFromBeginning);
ms.CopyFrom(f, size2);
Image3.Picture.Bitmap.LoadFromStream(ms); {ничего не грузится}
f.Free;
ms.Free;
end;
end.
Игорь Шевченко (2015-12-05 10:44:00) [4]
> Как это можно получить до записи.
Use TFileStream, Luke!
Валя (2015-12-05 10:04:00) [5]
> Юрий Зотов © (05.12.15 00:38) [5]
Спасибо по крайней мере идея понятна.
Скажем есть картинка загруженная в TImage, нужно же до записи знать сколько она байт. Как это можно получить до записи.
Юрий Зотов (2015-12-05 00:38:00) [6]> Валя (04.12.15 21:31)
1. 4 байта - объем X картинки в байтах
2. X байт - картинка
3. 4 байта - длина Y текста в байтах
4. Y байт - текст
5. 4 байта - объем Z иконки в байтах
6. Z байт - иконка
Игорь Шевченко (2015-12-04 22:55:00) [7]Use TFileStream, Luke!
Валя (2015-12-04 22:49:00) [8]пока не пойму как из такого файла загружать и обратно записывать битмап
Rouse_ (2015-12-04 22:39:00) [9]Записать в файл в указанном порядке и прочитать, в чем проблема то?
vegarulez (2015-12-04 22:03:00) [10]Tpanel+Timage+Tmemo