Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

GIF и ресурсы   Найти похожие ветки 

 
markers ©   (2006-03-13 09:43) [0]

Здраствуйте!
Мне нужно достать GIF из недр своей программы в Run-time.
Я нашёл код, как выдёргивать Bitmap, но на GIF я полностью не смог переправить, подскажите пожалуйста как быть!
Function loadgraphic(naam:string):TBitmap;
var
HResInfo: THandle;
BMF: TBitmapFileHeader;
MemHandle: THandle;
Stream: TMemoryStream;
ResPtr: PByte;
ResSize: Longint;
null:array [0..8] of char;
begin
strpcopy (null, naam);
HResInfo := FindResource(Application.Handle, null, "GIF");
ResSize := SizeofResource(Application.Handle, HResInfo);
MemHandle := LoadResource(Application.Handle, HResInfo);
ResPtr := LockResource(MemHandle);
Stream := TMemoryStream.Create;
try
 Stream.SetSize(ResSize + SizeOf(BMF));
 BMF.bfType := $4D42;
 Stream.write(BMF, SizeOf(BMF));
 Stream.write(ResPtr^, ResSize);
 Stream.Seek(0, 0);
 Result:= TBitmap.Create;
 Result.LoadFromStream(Stream);
finally
 Stream.Free;
end;
FreeResource(MemHandle);
end;


 
API ©   (2006-03-13 09:50) [1]

Stream.SetSize(ResSize + SizeOf(BMF));
BMF.bfType := $4D42;
Stream.write(BMF, SizeOf(BMF));
Stream.write(ResPtr^, ResSize);


Вы считаете, что этот код конвертирует GIF в BMP?
То есть, вот так, простым дописыванием "BM" в начало?

Вот вам и последствия "Я нашёл код"...


 
markers ©   (2006-03-13 09:52) [2]

Знаю, что нет. Но немог ничего подобрать


 
markers ©   (2006-03-13 09:54) [3]

Тобишь вы хотитте сказать, что нужна конвертация?


 
API ©   (2006-03-13 10:02) [4]

Тобишь вы хотитте сказать, что нужна конвертация?

А разве TBitmap предназначен для работы с GIF"ами?


 
markers ©   (2006-03-13 10:04) [5]

Да я знаю, что нет... Но пока ничего не придуумал оставил на месте. Может вы подскажите как сделать?


 
markers ©   (2006-03-13 10:05) [6]

Просто на уровне stream я не силён, уж простите. :(


 
API ©   (2006-03-13 10:11) [7]

Вероятно, нужен компонент, предназначенный для работы с графическими файлами в формате GIF.

Смотрите тут: http://www.torry.net/quicksearchd.php?String=GIF&Title=Yes


 
markers ©   (2006-03-13 10:13) [8]

У меня RxLib, он гифы поддерживает, проканает?


 
API ©   (2006-03-13 10:16) [9]

Не знаю, т.к. RxLib не использую.
По идее, если "поддерживает", то должно "проканать".


 
markers ©   (2006-03-13 10:20) [10]

Всё оказалось гораздо проще :)
 Result:= TGIFImage.Create;
 Result.LoadFromResourceName(HInstance,UpperCase(naam),RT_GIF);

И больше ничего не нужно!


 
markers ©   (2006-03-13 10:20) [11]

Боольшое спасибо, за подсказку!!!!!!
Я просто изначально не в то место рыл :)


 
markers ©   (2006-03-13 10:26) [12]

Тока вот как Result потом освободить? :(


 
Сергей М. ©   (2006-03-13 10:31) [13]


> как Result потом освободить?


Как обычно - Result.Free


 
API ©   (2006-03-13 10:33) [14]

FreeAndNil(Result); - это в применении к Вашей функции.

Только зачем?
Вы же вернуть его из функции должны.
Или уже что-то переписали?


 
API ©   (2006-03-13 10:35) [15]

Как обычно - Result.Free

Нельзя, функция вернет "мертвый" указатель.


 
markers ©   (2006-03-13 10:40) [16]

Не просто я в этой процедуре создаю Result записываю в него инфу, возвращаю и как мне его потом освободить? Или проще тогда юзать не Result, а создать глобальную переменную в которую тогде уже процедура будет пихать инфу...
/* Слушайте, а если сделать так
Procedure loadgraphic(naam:string, varImage:TGifImage);
Писал от руки могу ошибиться....... */
Идея добрая но мне не проканает :(


 
markers ©   (2006-03-13 10:44) [17]

А, освободить мне её нужно.
Представьте, у меня каталог продукции и если у каждой нет картинки и нет картинки (Сообщающая что её нет на данный продукт) на винте, то я её гружу из ресурсов, Сколько это ресурсов схавает? Дофига :)


 
Сергей М. ©   (2006-03-13 10:51) [18]


> API ©   (13.03.06 10:35) [15]
> Нельзя, функция вернет "мертвый" указатель.


Имелось ввиду - выполнить Free той объектной переменной, которой был присвоен Result ф-ции, в теле которой объект был создан и ссылка на который была возвращена как результат.


> markers ©   (13.03.06 10:44) [17]


var
 MyGIFImage: TGIFImage;

..

MyGIFImage := CreateGIFImageObjectFromResourceByName(имя ресурса);
try
.. работа с MyGIFImage
finally
 MyGIFImage.Free; //уничтожение
end;


 
API ©   (2006-03-13 10:55) [19]

а создать глобальную переменную в которую тогде уже процедура будет пихать инфу

Не надо таких жертв.

А вообще - я проблемы так и не понял.
Загрузили - использовали - уничтожили.



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.043 c
2-1144040924
dera
2006-04-03 09:08
2006.04.16
Как программно "привязать" DBGrid к DataSource?


15-1143423766
Fedia
2006-03-27 05:42
2006.04.16
Оформление описания структуры БД (или ГОСТ)


15-1143353614
Parus
2006-03-26 10:13
2006.04.16
В низу экрана, где "Пуск"...


15-1143032261
Физик
2006-03-22 15:57
2006.04.16
На етом форуме можна зделать штобы ответы приходили на mail


2-1144140665
ANB
2006-04-04 12:51
2006.04.16
Как в TRichEdit воткнуть картинку (если можно) ?