-
Вот например Bitmap file выташить из dll можно вот так var AModule: THandle; begin AModule := LoadLibrary('graphics.dll'); image1.Picture.BitMap.LoadFromResourceName(AModule, 'police'); FreeLibrary(AModule);
Вопрос: А КАК ВЫТАЩИТЬ из тойже dll JPEG картинку??????
-
TJpegImage.LoadFromStreaam + TResourceStream
-
Хорошо, теоретически выглядить должно вроде как так?????
JPG: TJEPEGImage; RS: TSesourceStream;
begin JPG:=JPG.Create; RS:=TResourceStream.Create(hInstance, PChar(copy('graphics.dll', 1, Pos('.', 'graphics.dll')-1)), 'poljpg'); -- вот тута у меня проблема, не могу додумать программа выдает Reource graphics not found JpG.LoadFromStreaam(RS); Image.Picture.Assign.(JPG);
где poljpg - сама картинка Жпег вшитая в длл
Помогите дописать правильно
-
Ура разобрался самостоятельно! Перелопатив кучу форумов и исходников, на которых ничего не работает, втретил такую же кучу людей с такой же проблемой. Так вот : КАК СОЗДАТЬ DLL-БИБЛИОТЕКУ И ИЗВЛЕЧЬ ИЗ НЕЁ JPEG НЕ РАСПАКОВЫВЫЯ НА ДИСК. (админ, можете добавить в faq)
1. Создаём файл graphics.rc 2. Пишем туда kartinka JPG kartinka.jpg (jpg и rc файлы в одном каталоге) 3. запускаем borland\delphi7\bin\brcc32.exe с параметром graphics.rc 4. Получив graphics.res в делфи создаем DLL Wizard 5. Дописываем после USES, строчку {$R graphics.res} и компилируем. 6. Получив graphics.dll кладем его в папку с разрабатываемой программой и пишем код куда вам надо:
var RS: TResourceStream; JPG: TJPEGImage; AModule: THandle; begin AModule:=LoadLibrary('graphics.dll'); RS:=TResourceStream.Create(AModule, 'kartinka', 'JPEG'); JPG:=TJPEGImage.Create; JPG.LoadFromStream(RS); Image1.Picture:=nil; Image1.Picture.Assign(JPG); JPG.Free; RS.Free;
Остаётся только расставить как вам надо try except. С битмапами проще - код расписан выше. Теоретически можно в длл зашить и мета файлы и т.д. Спасибо MBo за то что указал на правильный путь.
-
> Image1.Picture:=nil; > Image1.Picture.Assign(JPG);
Ты уверен, что ЭТО работает?
-
Насколько я представляю, должно быть так: Image1.Picture.Bitmap.Assign(JPG.Bitmap);
-
ага, как раз в битмап jpg грузить...
-
ЕЩЁ ОДИН МОМЕНТ
Если в файле graphics.rc мы пишем kartinka JPG kartinka.jpg то и вдальнейшем когда пишем программный код надо писать
RS:=TResourceStream.Create(AModule, 'kartinka', 'JPG'); а не JPEG, но у меня и так всё работало, главное чтоб в USES было прописано JPEG
-
> Ура разобрался самостоятельно!
так тебе же сказали в [1]
|