Как использовать новые возможности WIC в Delphi 2010 для файлов Canon?

StackOverflow https://stackoverflow.com/questions/2405899

  •  18-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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;

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

Другие советы

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

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

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

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

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

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

Спасибо, Ник И Эмбаркадеро!!!

  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;

Загрузив кодек 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;  
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top