[Delphi] Интересный момент.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Flame of Soul, 10 Aug 2009.

  1. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    У меня идет подгрузка *.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 или вообще уберем!!!

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

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    есть конечно

    uses jpeg;

    // Imbut = Image1(TImage)


    var
    Img: TJpegImage;
    begin
    Img:=TJpegImage.Create;
    Img.LoadFromFile('путь к файлу');
    Image1.Picture.Assign(Img);
    Img.Free;
    end;
     
    #2 flacs, 11 Aug 2009
    Last edited: 11 Aug 2009
    1 person likes this.
  3. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Да так более точно))))
    flacs код конечно рабочий, но идет выделение памяти в дополнительную ветку))) Держите заслуженные +5))

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

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Помоему лучше не придумать. Это самый оптимальный вариант.
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Flame of Soul Дай отгадаю. У тебя стоит BDS наверное. И ты наверное уже не помнишь (или еще незнаеш) что ранее такое не прокатывало т.е. в Delphi 7 LoadFromFile позволяет загружать тока bmp картинки. И для того чтобы работать с jpg то приходилось юзать модуль jpeg. А в последующих делфях это было изменено т.е. работа с этим модулем или его аналогом уже была встроен в сам класс TImage. Так что при использовании jpeg модуля ты особо ничего не потеряеш.
    В D7 сразу можно увидеть поддерживаемые форматы
    Code:
      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 где это будот встроенно
     
  6. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    slesh - я просто хочу посмотреть кто придумает самый экстровагантный способ, кто не заленится и напишет такое для данного решения, чтобы мурашки по коже пошли)))). Просто хотела найти таланты у которых есть свободное время, а тут таких уже и не видно(( а жаль.

    ну вот это уже более мение)))
     
  7. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    можно деассембнуть компонент и пофиксить ручками, жаль у меня его нет - я б сделал
     
  8. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    файлик переименовать?
     
    2 people like this.
  9. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    шикарный способ, правда))) такой вариант первый пока!
     
  10. flacs

    flacs Member

    Joined:
    28 Jan 2009
    Messages:
    81
    Likes Received:
    31
    Reputations:
    6
    ТС тему надо переименовать в "Алло! Мы ищем таланты!"

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

    dos999 Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    а может просто читать первые байты файла и смотреть jpg это или нет.
    если jpg то копировать куда нить в темп с переименованием и открывать.
    у джипегов первые байты вроде такие
    FF D8 FF E0 00 10 4A 46 49 46