Окружающая среда: Delphi XE5, Win7Firemonkey: Почему TBitmap.LoadFromFile() не работает?
У меня есть приложение VCL. Хотите использовать классы Firemonkey для небольшой обработки изображений. Задача - получить эскизы из файлов изображений.
bmp: TBitmap;
...
bmp := FMX.Graphics.TBitmap.Create(100, 100);
bmp.LoadThumbnailFromFile(filename, 100, 100);
Любая комбинация TBitmap и LoadFromFile, LoadFromStream, CreateFromFile терпит неудачу с исключением.
Я попытался загрузить bmp, png, tif, jpg ... всегда тот же результат.
В отладчике я вижу исключение нарушения прав доступа в FMX.Canvas.D2D.pas в строке:
TCanvasD2D.ImagingFactory.CreateDecoderFromStream(stream, GUID_NULL, WICDecodeMetadataCacheOnDemand, dec);
Что я должен сделать, чтобы избежать исключений и получить рабочий код? Чтобы включить некоторые кодеки?
ОБНОВЛЕНИЕ: На всех ... Можно ли использовать классы Firemonkey в приложении VCL? Он ищет меня, я не могу. Я прав?
UPDATE2: Теперь я стараюсь идти со следующим подходом Writing a FireMonkey DLL for use with a VCL application.
Моего FireMonkey DLL полного код
library wnimage;
uses
System.SysUtils,
System.Classes,
FMX.Graphics;
{$R *.res}
function GetThumbnail(filename: String; width, height: Integer): TStream;
var
bmp, th: TBitmap;
begin
bmp := TBitmap.CreateFromFile(filename);
th := bmp.CreateThumbnail(width, height);
Result := TMemoryStream.Create;
th.SaveToStream(Result);
th.Free;
bmp.Free;
end;
exports
GetThumbnail;
begin
end.
И снова я получаю такое же нарушение прав доступа в библиотеке строки:
bmp := TBitmap.CreateFromFile(filename);
Почему вы чувствуете необходимость использования FMX? –
Нет необходимости использовать FMX для этого. Реализация «CreateThumbnail» на самом деле не ищет встроенную миниатюру - все, что она делает, это создать новый экземпляр TBitmap с указанным размером и нарисовать исходную растровую карту, что вы можете сделать достаточно легко с помощью VCL. Фактически, для изображений JPEG, VCL фактически предлагает больше возможностей, поскольку класс TJpegImage обладает свойством Scale - установите его перед jsEighth перед загрузкой изображения, и вы избежите штрафа за то, что сначала загрузите полное изображение. –
Проблема в том, что мне нужны миниатюры не только для bmp/jpeg, но и для png/tif и так далее. И FMX может это сделать ... – mad