Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Поток и BitMap   Найти похожие ветки 

 
vvvaaa   (2004-12-06 23:32) [0]

Проблемка интересная нарисовалась.
Bitmap из Stream"a не читается :((
Вобщих чертах:
-----Save-----
bmp:TBitMap;
...
bmp.SaveToStream(Stream);
...
-----Load-----
bmp:TBitMap;
...
bmp.LoadFromStream(Stream);
...
Не работает!!!

-----Save-----
...
Image1.Picture.BitMap.SaveToStream(Stream);

-----Load-----
bmp:TBitMap;
...
bmp.LoadFromStream(Stream);

Работает!!!
Кто знает объясните почему напрямую через BitMap не работает.


 
MBo ©   (2004-12-07 06:23) [1]

>Не работает!!!
Работает, если встать на начало потока (cм. справку по TStream)


 
vvvaaa   (2004-12-07 07:57) [2]

>Работает, если встать на начало потока (cм. справку по TStream)

Мне не катят варианты типа в конец, в начало, т.к в потоке много разной инфы типа течста чисел, а также большое количество картинок. И меня иртересует чем bitmap в image отличается  от простого bitmap"a


 
Digitman ©   (2004-12-07 08:43) [3]


> чем bitmap в image отличается  от простого bitmap"a


ничем.


> Не работает!!!
> Работает!!!


детский сад. иначе не скажешь.
что, прямо так и говорит, мол, "работаю" или "не работаю" ?


> Мне не катят варианты типа в конец, в начало


ему про фому, он все про ерему свое гнет ..
ты хоть вник, о чем речь идет ? речь идет о том, что считывание из TStream идет с позиции, обозначенной св-вом Position !


 
vvvaaa   (2004-12-07 09:15) [4]

>Digitman ©
>что, прямо так и говорит, мол, "работаю" или "не работаю"

Да прямо так и говорит сначала загружает картинку, а потом говорит Stream read error.

Всё разнообразие ошибок появляется после строки
bmp:=Image1.Picture.BitMap;
может я здесь что-то не так написал??


 
vvvaaa   (2004-12-07 09:33) [5]

Всё разобрался через Assign работает, хотя не понимаю разницы межу ":=" и Assign


 
Digitman ©   (2004-12-07 09:33) [6]


> vvvaaa   (07.12.04 09:15) [4]


ты в состоянии привести полный код ?
по этим разрозненным шматкам кода, неизвестно где, как и в какой последовательности вызываемого, указать на твои ошибки совершенно невозможно


 
MBo ©   (2004-12-07 09:35) [7]

>Мне не катят варианты типа в конец, в начало
битмапу до фонаря, что тебе не катит.
Он умеет делать то, что ему положено - считать данные с текущей позиции до конца потока.


 
vvvaaa   (2004-12-07 10:15) [8]

>Он умеет делать то, что ему положено - считать данные с текущей
>позиции до конца потока.

А вот и нет:
procedure TForm1.Save(FileName:string);
var Stream:TMemoryStream;
   bmp:TBitMap;
   Len:word;
   tst:string;
begin
bmp:=TBitMap.Create;
Stream:=TMemoryStream.Create;
Stream.Position:=0;
tst:=Edit1.Text;
len:=length(tst);
Stream.Write(len,Sizeof(len));
Stream.Write(PChar(tst)^,len);
bmp.Assign(Image1.Picture.Bitmap);
bmp.SaveToStream(Stream);
tst:=Edit2.Text;
len:=length(tst);
Stream.Write(len,Sizeof(len));
Stream.Write(PChar(tst)^,len);
bmp.Assign(Image2.Picture.Bitmap);
bmp.SaveToStream(Stream);
tst:=Edit3.Text;
len:=length(tst);
Stream.Write(len,Sizeof(len));
Stream.Write(PChar(tst)^,len);
Stream.SaveToFile(FileName);
Stream.Free;
bmp.Free;
end;

procedure TForm1.Load(FileName:string)
var Stream:TMemoryStream;
   Len:word;
   bmp:TBitMap;
   c:array [1..1000] of char;
begin
bmp:=TBitMap.Create;
Stream:=TMemoryStream.Create;
Stream.LoadFromFile(FileName);
Stream.Position:=0;
Stream.Read(len,Sizeof(len));
Stream.Read(c,len);
Edit1.Text:=copy(c,1,Len);
bmp.LoadFromStream(Stream);
Image1.Picture.Bitmap:=bmp;
Stream.Read(len,Sizeof(len));
Stream.Read(c,len);
Edit2.Text:=copy(c,1,Len);
bmp.LoadFromStream(Stream);
Image2.Picture.Bitmap:=bmp;
Stream.Read(len,Sizeof(len));
Stream.Read(c,len);
Edit3.Text:=copy(c,1,Len);
bmp.Free;
Stream.Free;
end;


Я вырезал частный фрагмент кода, и это уже работает.
В один поток сохраняется
строка,картинка,строка,картинка,строка

Но обратите внимание как загружается строка. Как писать в поток я Help"e нашел, а загружвть приходится вот таким извращеннем способом:(


 
MBo ©   (2004-12-07 12:51) [9]


 Filename: string = "e:\qwert.dat";

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 Stream, TempStream: TMemoryStream;
 bmp: TBitMap;
 Len: Integer;
 tst: string;
begin
 bmp := TBitMap.Create;
 Stream := TMemoryStream.Create;
 TempStream := TMemoryStream.Create;
 tst := Edit1.Text;
 len := length(tst);
 Stream.Write(len, Sizeof(len));
 Stream.Write(tst[1], len);
 bmp.Assign(Image1.Picture.Bitmap);
 bmp.SaveToStream(TempStream);
 len := TempStream.Size;
 TempStream.Position := 0;
 Stream.Write(len, Sizeof(len));
 Stream.CopyFrom(TempStream, len);
//TempStream.Clear
//...
 Stream.SaveToFile(FileName);
 TempStream.Free;
 Stream.Free;
 bmp.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Stream, TempStream: TMemoryStream;
 Len: Integer;
 bmp: TBitMap;
 tst: string;
begin
 bmp := TBitMap.Create;
 Stream := TMemoryStream.Create;
 TempStream := TMemoryStream.Create;
 Stream.LoadFromFile(FileName);
 Stream.Position := 0;
 Stream.Read(len, Sizeof(len));
 SetLength(tst, len);
 Stream.Read(tst[1], len);
 Edit2.Text := tst;
 Stream.Read(len, Sizeof(len));
 TempStream.CopyFrom(Stream, len);
 TempStream.Position := 0;
 bmp.LoadFromStream(TempStream);
 Image2.Picture.Bitmap := bmp;
//TempStream.Clear;
//...
 bmp.Free;
 Stream.Free;
 TempStream.Free;
end;


 
vvvaaa   (2004-12-07 19:31) [10]

>MBo ©

Спасибо, но я не совсем понял смысл добавления нового потока
если и без него работает. А за tst[1] отдельное спасибо, чё то я тормознул:)



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.048 c
1-1110789480
Max Zyuzin
2005-03-14 11:38
2005.03.27
StatusBar с прогрессом


4-1107982050
Massiv
2005-02-09 23:47
2005.03.27
Чтение LocalMachine KEY


1-1110888417
EvgeniyR
2005-03-15 15:06
2005.03.27
Изменение размеров формы


14-1109923750
Jeer
2005-03-04 11:09
2005.03.27
Что с мужиками ?


1-1110790309
Sanich
2005-03-14 11:51
2005.03.27
Экспорт изFastReport.