Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Интересный момент. (https://forum.antichat.xyz/showthread.php?t=134191)

Flame of Soul 10.08.2009 23:33

[Delphi] Интересный момент.
 
У меня идет подгрузка *.jpg изображений вот таким простым способом.

PHP код:

  Imbut_1.Picture.Graphic := nil;
  if 
FileExists(WayAp+'\GrapRes\ScA_001b.jpg'then
  Imbut_1
.Picture.LoadFromFile(WayAp+'\GrapRes\ScA_001b.jpg')
  else 
ShowMessage('Error File: '+WayAp+'\GrapRes\ScA_001b.jpg'); 

Imbut - просто TImage.
WayAp - просто Геткурент директории.

Но фокус в том что, если мы у файла уберем тип или поменяем на другой то Дельфин не понимает с каким форматом он работает))) то есть он пляшет от раширения файла, а не от его заголовка. Лезти в код и менять непосредственно там желания нету. Может быть есть какой то альтернативный способ загрузки файла с измененным расширением, ну допустим мы с jpg его поменяем на mov или вообще уберем!!!

Исходные коды приветствуются. За рабочий код не пожалею + плюсиков.

flacs 11.08.2009 00:04

есть конечно

uses jpeg;

// Imbut = Image1(TImage)


var
Img: TJpegImage;
begin
Img:=TJpegImage.Create;
Img.LoadFromFile('путь к файлу');
Image1.Picture.Assign(Img);
Img.Free;
end;

Flame of Soul 11.08.2009 02:53

Цитата:

// Imbut = Image1(TImage)
Да так более точно))))
flacs код конечно рабочий, но идет выделение памяти в дополнительную ветку))) Держите заслуженные +5))

У кого есть более элегантный вариант?

=Zeus= 11.08.2009 04:59

Помоему лучше не придумать. Это самый оптимальный вариант.

slesh 11.08.2009 08:26

2 Flame of Soul Дай отгадаю. У тебя стоит BDS наверное. И ты наверное уже не помнишь (или еще незнаеш) что ранее такое не прокатывало т.е. в Delphi 7 LoadFromFile позволяет загружать тока bmp картинки. И для того чтобы работать с jpg то приходилось юзать модуль jpeg. А в последующих делфях это было изменено т.е. работа с этим модулем или его аналогом уже была встроен в сам класс TImage. Так что при использовании jpeg модуля ты особо ничего не потеряеш.
В D7 сразу можно увидеть поддерживаемые форматы
Код:

  Add('wmf', SVMetafiles, 0, TMetafile);
  Add('emf', SVEnhMetafiles, 0, TMetafile);
  Add('ico', SVIcons, 0, TIcon);
  Add('bmp', SVBitmaps, 0, TBitmap);

Если проследить события то
TPicture.Create -> GetFileFormats -> TFileFormatsList.Create -> заполнение сопоставления расширения и типа файла.
Эта инфа хранится в переменной FileFormats но она является локальной для Graphics.pas так что тебе или делать её глобальной и методами add / remove добавлять сопоставления или создать свой класс на основе TPicture где это будот встроенно

Flame of Soul 11.08.2009 12:59

slesh - я просто хочу посмотреть кто придумает самый экстровагантный способ, кто не заленится и напишет такое для данного решения, чтобы мурашки по коже пошли)))). Просто хотела найти таланты у которых есть свободное время, а тут таких уже и не видно(( а жаль.

Цитата:

или создать свой класс на основе TPicture где это будет встроенно
ну вот это уже более мение)))

sn0w 11.08.2009 13:24

можно деассембнуть компонент и пофиксить ручками, жаль у меня его нет - я б сделал

desTiny 11.08.2009 13:29

файлик переименовать?

Flame of Soul 11.08.2009 14:45

Цитата:

файлик переименовать?
шикарный способ, правда))) такой вариант первый пока!

flacs 12.08.2009 12:08

ТС тему надо переименовать в "Алло! Мы ищем таланты!"

P.S: А конкретно неординарных личностей, имеющих гениальные решения.


Время: 02:23