Главная страница
    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.46 MB
Время: 0.007 c
1-87980
vanek8
2003-03-18 07:59
2003.03.27
Отчеты


1-88007
Bit Swinger
2003-03-14 01:08
2003.03.27
Как можно эмулировать командный процессор ОС Unix в виндах..


1-87910
Filmax
2003-03-17 06:16
2003.03.27
Как найти производную от функции


4-88304
}{enon
2003-01-30 19:46
2003.03.27
Невозможность доступа


1-87957
Vasily_
2003-03-17 21:31
2003.03.27
Контроль внешнего процесса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский