Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
2-1143630077
serg111111
2006-03-29 15:01
2006.04.16
Вопрос заклюсается в следующем!!!!!!!!!-


15-1143032206
sBeysenov
2006-03-22 15:56
2006.04.16
Неполная версия Delphi


15-1143010657
WondeRu
2006-03-22 09:57
2006.04.16
Очeредные веселости от Google


2-1144129973
Id
2006-04-04 09:52
2006.04.16
Помогите построитьб запрос


1-1141859568
Кашперук Иван
2006-03-09 02:12
2006.04.16
Запуск приложения при завершении работы Windows





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