Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПоток и 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 вся ветка
Форум: "Media";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c