Главная страница
    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.008 c
1-87930
i4Me
2003-03-14 10:02
2003.03.27
Как встроить свой шрифт в программу?


1-87952
An
2003-03-17 11:12
2003.03.27
Как таскать форму за клиентскую часть?


3-87840
Opryshok
2003-03-10 10:04
2003.03.27
не могу залоковать таблички


3-87864
SVA
2003-03-11 09:48
2003.03.27
Помогите с Select


3-87775
Behemoth
2003-03-07 12:12
2003.03.27
Доступ к BDE через Web





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский