Форум: "Начинающим";
Текущий архив: 2017.11.19;
Скачать: [xml.tar.bz2];
ВнизЗапись/чтение Bitmap+текстовое описание в файл Найти похожие ветки
← →
Валя (2015-12-04 21:31) [0]Нужно реализовать файл специфического формата:
секция1: картинка bmp;
секция2: текстовое описание;
секция3: маленькая иконка для кнопки, по клику которой и будет открывать bitmap с описанием.
Подскажите как ето все реализовать с одним файлом
← →
vegarulez (2015-12-04 22:03) [1]Tpanel+Timage+Tmemo
← →
Rouse_ © (2015-12-04 22:39) [2]Записать в файл в указанном порядке и прочитать, в чем проблема то?
← →
Валя (2015-12-04 22:49) [3]пока не пойму как из такого файла загружать и обратно записывать битмап
← →
Игорь Шевченко © (2015-12-04 22:55) [4]Use TFileStream, Luke!
← →
Юрий Зотов © (2015-12-05 00:38) [5]> Валя (04.12.15 21:31)
1. 4 байта - объем X картинки в байтах
2. X байт - картинка
3. 4 байта - длина Y текста в байтах
4. Y байт - текст
5. 4 байта - объем Z иконки в байтах
6. Z байт - иконка
← →
Валя (2015-12-05 10:04) [6]
> Юрий Зотов © (05.12.15 00:38) [5]
Спасибо по крайней мере идея понятна.
Скажем есть картинка загруженная в TImage, нужно же до записи знать сколько она байт. Как это можно получить до записи.
← →
Игорь Шевченко © (2015-12-05 10:44) [7]
> Как это можно получить до записи.
Use TFileStream, Luke!
← →
Валя (2015-12-05 11:47) [8]Не читается картинка в 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.
← →
aka © (2015-12-05 12:37) [9]ms.Position := 0;
Image3.Picture.Bitmap.LoadFromStream(ms);
← →
Лори (2015-12-25 03:02) [10]> Use TFileStream, Luke!
ам... Имелось ввиду TFileStream.WriteComponent() ? Оно и картинку сожрёт? %)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.11.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c