Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.017 c
3-87830
Andy Eremin
2003-03-07 10:34
2003.03.27
Пустое поле


3-87772
Ich Hasse
2003-03-07 00:02
2003.03.27
Двойной запрос


8-88078
Yasha
2002-12-19 18:04
2003.03.27
печать графики


14-88168
Danger
2003-03-10 21:41
2003.03.27
Можно ли заставить написанное на Дельфи работать как скрипт??


8-88084
stasais
2002-12-07 17:02
2003.03.27
Размер видео-файла на экране