Здравствуйте Дельфийци.
Пишу простую скаду или типа того. Создаю динамические объекты потом записываю на диск, при необходимости считываю данные об
объектах и восстанавливаю их. Пишу данные в файл типа TMemIniFile. Все хорошо пока не дошел до записи картинок. В программе картинки хранятся
в формате TJPEGImage, при отображении преобразовываю в TBitMap и отображаю. При записи в файл картинку загружаю в поток, потом из потока записываю
в файл.
Так вот, если я картинку загрузил из графического файла (*.jpg или *.jpeg) она отображается довольно корректно. Но если я записал в файл типа
TMemIniFile а затем оттуда считал, появляются некоторые искажения фона. Если я рисунок преобразовываю в TBitMap затем записываю в файл TMemIniFile,
то после считывания этого файла рисунок отображается корректно. Но TBitMap на порядок или около того занимает больше места.
Теперь собственно вопрос, как записать картинку типа TJPEGImage в файл типа TMemIniFile, не внося дополнительных искажений?
И заодно второй вопрос, как повысить качество масштабируемой картинки Canvas.StretchDraw(Rect,bmp); немного искажает картинки.
uses IniFiles,Jpeg;
...........
Var
P1 : TJPEGImage;
IniFile : TMemIniFile;
....................
P1 := TJPEGImage.Create;
IniFile:=TMemIniFile.Create('1234')
.....................
P1.Free;
IniFile.Free;
.....................
procedure ReadF;
Begin
If TMyPicture.OpenPictureDialog.Execute then
Begin
P1.LoadFromFile(OpenPictureDialog.FileName);
P1.CompressionQuality:=100;
P1.Compress;
End;
End;
Procedure TMyPicture.Draw(Can : TCanvas);
var
bmp : TBitMap;
Begin
bmp:=TBitMap.Create;
bmp.Assign(P1);
Canvas.Draw(Left,Top,bmp)
bmp.Free;
End;
Procedure TMyPicture.WriteFile;
Var
ms : TMemoryStream;
Begin
ms := TMemoryStream.Create;
P1.SaveToStream(ms);
ms.Position :=0;
IniFile.WriteBinaryStream(Section,'P1',ms);
IniFile.UpdateFile;
finally
ms.Free;
End;
Procedure TMyPicture.ReadFile;
Var
ms : TMemoryStream;
Begin
ms := TMemoryStream.Create;
IniFile.ReadBinaryStream(Section,'P1',ms);
ms.Position:=0;
P1.LoadFromStream(ms);
finally
ms.Free;
end;
End;