Как использовать новые возможности WIC в Delphi 2010 для файлов Canon?
-
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;