![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Файлы в GLMaterialLibrary из потока [Delphi, Windows]
Lambda © (2006-03-20 11:32:00)Интересует не загрузка целиком MaterialLibrary (GLScene), а загрузка например jpeg в МЛ. Т.е. по сути загрузить в GLMaterialLibrary...Image картинку из jpeg (bmp, tga...)
Домовенок (2006-03-21 15:44:00) [21]> Lambda (21.03.06 15:01) [13]
1. Ты забыл освободить P
Угу, и BM тоже.
> Старик (21.03.06 15:24) [14]
> Lambda, я что-то не понял - почему именно мемори-стрим ?
> Чем тебя не устраивает самый обычный TFileStream?
Судя по всему там проблема не в TMemoryStream, а именно в TBitMap, то есть в графическом формате, так как TPicture принимает нормально.
Старик (2006-03-21 15:24:00) [22]Lambda, я что-то не понял - почему именно мемори-стрим ?
Чем тебя не устраивает самый обычный TFileStream?
var s : TFileStream;
begin
s := TFileStream.Create(FileName.bmp, fmOpenRead or fmShareDenyWrite);
MyBmp := TBitmap.Create;
MyBmp.LoadFromStream(s);
s.Free;
//При таком подходе битмап грузится нормально.
GLMatLib1.Materials[0].Texture.Image.Assign(MyBmp);
//Другое дело, что тебе нужно уточнить, МОЖНО ЛИ к GLScene материалам делать вот такой вот ассигн. Может они этого не держат? (Я не спец в GLScene).
И потом, у меня иногда бывали странные ситуации с битмапами:
Битмапы, нарисованные в фотошопе, грузились идеально.
Битмапы, конвертированные из JPG с помощью айсидюхи, грузится отказывались.
Lambda (2006-03-21 15:01:00) [23]0. Спасибо, Домовенок, попробую твой вариант
1. Ты забыл освободить P
Домовенок (2006-03-21 14:09:00) [24]Я кстати тоже с этим не так давно мучался. Так и не разобрался. Но вот сейчас попробовал через TPicture, получилось. Это конечно не значит, что так и надо делать, но как информация к размышлению.
procedure TForm1.Button1Click(Sender: TObject);
var
MS: TMemoryStream;
BM: TBitmap;
P: TPicture;
begin
MS := TMemoryStream.Create;
BM := TBitmap.Create;
P := TPicture.Create;
MS.LoadFromFile('test.bmp');
BM.LoadFromStream(MS);
P.Assign(BM);
GLMaterialLibrary1.Materials.Add;
GLMaterialLibrary1.Materials[0].Material.Texture.Image.Assign(P);
GLMaterialLibrary1.Materials[0].Name := 'test';
GLMaterialLibrary1.Materials[0].Material.Texture.Disabled := False;
MS.Free;
end;
DeadMeat (2006-03-21 14:03:00) [25]И если это так, то на какой строке именно вылетает?
На загрузке в битмап из потока или на присваивании материалу битмапа?
---
...Death Is Only The Begining...
DeadMeat (2006-03-21 14:01:00) [26]Опс.. Не в тему.
У тебя сообщение об ошибке же лезет?
---
...Death Is Only The Begining...
DeadMeat (2006-03-21 14:00:00) [27]А
GLMaterialLibrary.Materials[0].Material.Texture.NotifyChange (self);тоже не помогает?
---
...Death Is Only The Begining...
Lambda (2006-03-21 10:59:00) [28]Не помогло :(
DeadMeat (2006-03-21 10:54:00) [29]А после
MyStream.LoadFromFile('file.ext');, ты делалMyStream.Position := 0;??
---
...Death Is Only The Begining...
Lambda (2006-03-21 10:25:00) [30]Разумеется предварительно инициализируется поток
MyStream := TMemoryStream.Create;
MyStream.LoadFromFile('file.ext');
Lambda (2006-03-21 09:03:00) [31]Да какой там код...
BMP := TBitmap.Create;
BMP.LoadFromStream(MyStream);
GLMaterialLibrary.Materials.Add;
GLMaterialLibrary.Materials[0].Material.Texture.Image.Assign(BMP);
GLMaterialLibrary.Materials[0].Name := 'test';
GLMaterialLibrary.Materials[0].Material.Texture.Disabled := False;
BMP.Free;
Результат: Bitmap image is not valid
Старик (2006-03-21 08:09:00) [32]Дай сюда нерабочий код загрузки с помощью LoadFromStream
Lambda (2006-03-21 07:55:00) [33]Хорошо, раз никто не знает ответа, то перефразирую вопрос: есть ли способ (ответа "есть" недостаточно) загрузить изображение из потока в bitmap, к примеру?
Lambda (2006-03-20 13:11:00) [34]Ого. Никто не знает? Или все упорно молчат :(
Lambda (2006-03-20 11:34:00) [35]ЗЫ Загрузка именно из потока. LoadFromStream() не работает, даже не советуйте