Как использовать новую функцию WIC в Delphi 2010 для файлов Canon? - PullRequest
1 голос
/ 09 марта 2010

Кто-нибудь знает какой-нибудь пример кода, который показывает, как Delphi 2010 может читать файлы RAW, используя свой новый интерфейс COM для WIC?

Я хочу прочитать изображения Canon RAW, а затем получить доступ к определенным пикселям ...

Ответы [ 4 ]

3 голосов
/ 09 марта 2010

Это простейшее использование:

procedure TForm116.Button1Click(Sender: TObject);
var
  WIC: TWICImage;
begin
  WIC := TWICImage.Create;
  try
    WIC.LoadFromFile('MyFilename.raw');
    Image1.Picture.Graphic.Assign(WIC);
  finally
    WIC.Free;
  end;
end;

Существует много, много, много разных типов «сырых» форматов графических файлов, поэтому неясно, сможет ли WIC справиться с этим.

1 голос
/ 09 мая 2010

Работать с TPicture очень сложно, когда вы обращаетесь к свойству Graphic, оно ничего не проверяет. Чтобы заставить код Ника работать, вы можете сначала заставить Картинку создать растровое изображение:

Image1.Picture.Bitmap;
Image1.Picture.Graphic.Assign(WIC);

Было бы неплохо, если бы класс TPicture более успешно скрывал детали своей реализации: -)

0 голосов
/ 02 августа 2010

Загрузив кодек Canon RAW, rc170upd_7l.exe, от http://www.usa.canon.com/cusa/windows_vista/cameras/eos_slr_camera_systems/canon_raw_codec_software#DriversAndSoftware, это отображает изображение в Delphi 2010 на XP SP3:

var  
    WIC: TWICImage;  
begin  
    WIC := TWICImage.Create;  
    try  
        WIC.LoadFromFile('IMG_0201.CR2'); // WIC.ImageFormat reports wifOther  
        Img1.Picture.Assign(WIC);  
    finally  
        WIC.Free;  
    end;  
end;  
0 голосов
/ 25 марта 2010

В конце концов, ответ Ника был верным! Я вернулся, посмотрел повнимательнее и обнаружил, что исключение происходит в операторе Assign ... потому что на изображении в моей форме нет изображения! Назначение любого изображения в Инспекторе объектов IDE или его инициализация способом, аналогичным приведенному ниже, позволили ему работать великолепно!

Приведенный ниже код преобразует файл RAW в файл BMP. Я не очень много работал с изображениями, поэтому я не совсем уверен, что приведенный ниже код верен, но, похоже, он работает. Обратная связь приветствуется.

Напоминание другим разработчикам: мой предыдущий комментарий содержит ссылки на отличный источник примеров RAW-файлов и кодеков. Это бесценно.

Спасибо, Ник, и Embarcadero !!!

  procedure TForm1.Button1Click(Sender: TObject);
  var
    WIC: TWICImage;
    BMP: TBitMap;
  begin
    WIC := TWICImage.Create;
    BMP := TBitMap.Create;
    try
      WIC.LoadFromFile('MyFileName.Raw');
      BMP.Assign(WIC);
      BMP.SaveToFile('MyFilename.bmp');
    finally
      WIC.Free;
      BMP.Free;
    end;
  end;
...