Текущий архив: 2003.03.27;
Скачать: CL | DM;
ВнизНетипизированный файл и Tbitmap Найти похожие ветки
← →
ghg (2003-03-13 08:41) [0]Записываю в файл так:
map : Tbitmap;
...
ddd:=TMemoryStream.Create;
map.SaveToStream(ddd);
map_size:=ddd.size;
blockwrite(ooo,map_size,sizeof(map_size));
setlength(a,ddd.size);
for i:=0 to ddd.size-1 do
begin
ddd.write(a[i], 1);
blockwrite(ooo, a[i], 1);
end;
setlength(a,0);
...
А вынимаю так:
ddd:=TMemoryStream.Create;
blockread(ooo,map_size,sizeof(map_size));
position:=filepos(ooo);
setlength(a, map_size);
for i:=0 to map_size-1 do
begin
ddd.read(a[i],1);
end;
if map_size<>0 then map.loadfromstream(ddd);
setlength(a,0);
И после выемки Tbitmap из файла в переменной map нет ничего.
Вопрос: что не так и как надо?
С наилучшими ...
← →
icWasya (2003-03-13 10:10) [1]попробуй писать так
map : Tbitmap;
ooo : file;
...
rewrite(ooo,1);
...
ddd:=TMemoryStream.Create;
map.SaveToStream(ddd);
map_size:=ddd.size;
blockwrite(ooo,map_size,sizeof(map_size));
setlength(a,ddd.size);
ddd.seek(0,0);
ddd. read(a[0], map_size);
blockwrite(ooo, a[0], map_size);
setlength(a,0);
...
А вынимать так:
ddd:=TMemoryStream.Create;
blockread(ooo,map_size,sizeof(map_size));
position:=filepos(ooo);
setlength(a, map_size);
ddd. write(a[0],map_size);
ddd.seek(0,0);
if map_size<>0 then map.loadfromstream(ddd);
setlength(a,0);
← →
ghg (2003-03-13 11:03) [2]При использовании вышеописанного кода, в строке:
if map_size<>0 then map.loadfromstream(ddd);
вылазит ошибка EInvalidGraphic. message:"Bitmap image is not valid "
Естественно при извлечении. При записи проблем нет и по байтам все в порядке.
← →
Palladin (2003-03-13 11:14) [3]ну конечено выдаст, прочитать то массив забыли :)
← →
Palladin (2003-03-13 11:16) [4]
ddd:=TMemoryStream.Create;
blockread(ooo,map_size,sizeof(map_size));
setlength(a, map_size);
blockread(ooo,a[0],map_size);
ddd.write(a[0],map_size);
ddd.seek(0,0);
if map_size<>0 then map.loadfromstream(ddd);
setlength(a,0);
← →
ghg (2003-03-13 11:30) [5]Ну в общем тоже что было и в начале. Такое ощущение что ничего нет в Tbitmap.
В приложении есть возможность работать с bitmap загружеными из файла, так с ними все нормально. А при загруженом из нетипизированного файла как будто и нет ничего.
← →
ghg (2003-03-13 11:33) [6]>Palladin © (13.03.03 11:16)
Все спасибо.
← →
theodor_iv (2003-03-13 14:47) [7]> ghg
При записи в файл у тебя записывается содержимое массива а, который в приведенном тобой коде НЕ ЗАПОЛНЯЕТСЯ.
Кроме того, все нижеследующие строки
> setlength(a,ddd.size);
> for i:=0 to ddd.size-1 do
> begin
> ddd.write(a[i], 1);
> blockwrite(ooo, a[i], 1);
> end;
> setlength(a,0);
можно заменить одной строкой:
blockwrite(ooo, ddd.Memory^, ddd.size);
← →
now_aleks (2003-03-13 19:34) [8]Записать например так :
var
Rys : TBitMap;
MemStream : TMemoryStream;
begin
MemStream:=TMemoryStream.Create;
Rys:=TBItMap.Create;
Rys.LoadFromFile("c:\LubojFail.bmp");
Rys.SaveToStream(MemStream);
MemStream.Position:=0;
MemStream.SaveToFile("c:\OutFail");
MemStream.Free;
Rys.Free;
end;
А загрузить так :
begin
MemStream:=TMemoryStream.Create;
MemStream.LoadFromFile("c:\OutFail");
Rys:=TBItMap.Create;
Rys.LoadFromStream(MemStream);
Canvas.Draw(0,0,Rys);
MemStream.Free;
Rys.Free;
end;
← →
now_aleks (2003-03-13 19:38) [9]Записать например так :
var
Rys : TBitMap;
MemStream : TMemoryStream;
begin
MemStream:=TMemoryStream.Create;
Rys:=TBItMap.Create;
Rys.LoadFromFile("c:\LubojFail.bmp");
Rys.SaveToStream(MemStream);
MemStream.Position:=0;
MemStream.SaveToFile("c:\OutFail");
MemStream.Free;
Rys.Free;
end;
а загрузить так :
begin
MemStream:=TMemoryStream.Create;
MemStream.LoadFromFile("c:\OutFail");
Rys:=TBItMap.Create;
Rys.LoadFromStream(MemStream);
Canvas.Draw(0,0,Rys); // демонстрация
MemStream.Free;
Rys.Free;
end;
Страницы: 1 вся ветка
Текущий архив: 2003.03.27;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.008 c