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

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

Запись/чтение 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


Наверх

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