Показать сообщение отдельно
  #1  
Старый 03.03.2015, 00:15
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию Конвертация PNG GIF BMP в JPG в TMemoryStream

Добрый день. Есть необходимость конвертации картинок разных форматов в ЖПЕГ, но желательно в TMemoryStream, чтоб все было в ОЗУ
для начала

Код:
PicStream:TMemoryStream;
....
PicStream.LoadFromFile(FullPath1+PicNameStr);
TypeOfPic:=KindOfImage(PicStream.Memory);     (*функция возвращает число соответсвующее типу загруженного с Жд файла, все работает*)

if TypeOfPic = 4 then
begin
  ShowMessage('PNG');
  Png2Jpeg(PicStream);        (*вызов процедуры где и должна быть конвертация*)
end;

PicStream.Position := 0;  (*загрузка в ИМИДЖ картинки только ЖПЕГ из потока после трансформации, тут все работает, если ЖПЕГ то вывод в норме*)
JPG:= TJpegImage.Create;
try
  JPG.LoadFromStream(PicStream);
  ImgConv.Picture.Graphic:=JPG;
finally
  FreeAndNil(JPG);
end;

....
procedure Png2Jpeg(aPicStream:TMemoryStream);
var  JPG:TJpegImage;  PNG:TPngImage;  BMP:TBitmap;
begin
  JPG:=TJpegImage.Create;
  PNG:=TPngImage.Create;
  BMP:=TBitmap.Create;
  try
    aPicStream.Position:=0;
    PNG.LoadFromStream(aPicStream);
    //BMP.Assign(PNG);
    //JPG.Assign(BMP);
    JPG.Assign(PNG);

    JPG.SaveToStream(aPicStream);
  finally
    FreeAndNil(JPG);
    FreeAndNil(PNG);
    FreeAndNil(BMP);
  end;
end;

идет ошибка 53, что значит отсутствие ЖПЕГ при выводе в ИМИДЖ результатов конвертации

Вопрос :
- вообще везде используют только загрузку выгрузку в файл, не поток, может из за этого
- что не учтено?
- может в ХЕ3 что то по другому чем с Д7, откуда все примеры
Ответить с цитированием