Главная страница
    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.043 c
1-1141919888
TStas
2006-03-09 18:58
2006.04.16
КАк программно зазипить папку?


2-1143870991
CAHEK
2006-04-01 09:56
2006.04.16
TreeView


15-1143304649
Mozart
2006-03-25 19:37
2006.04.16
Delphi и Linux


2-1143823246
ded22
2006-03-31 20:40
2006.04.16
Edit и Таблица


15-1143462286
PZ
2006-03-27 16:24
2006.04.16
Информация для размышления





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