问题:如何去除残影?
详细信息:我使用的是delphi xe10。我正在制作简单的 imageview 应用程序。电脑规格:I7 6700HQ,Ram16G。Windows10,64位。
我在表单上设置了 Opendialog、ImageViewer、ListView、Button。没有更改默认名称,因为它是用于测试的。
下面是这个程序的过程。1.点击设置目录按钮。2. 然后我可以在 Listview 的目录中看到文件名 3. 单击 listview 中的项目。4.可以在ImageViewer中看到图片
它运作良好。但残像仍然像马赛克一样。所以,我试过了
image1.free;
image1.canvas.free;
image1.bitmap.free;
最后,添加以下代码。但是没有用。
if Assigned(ImageViewer1.Bitmap) then
begin
ImageViewer1.Bitmap.Clear(0);
end;
有什么我需要尝试更多的吗?
这是我的完整代码。
unit app4VIew;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.ListView, FMX.Layouts,
FMX.ExtCtrls, FMX.Objects;
type
TForm1 = class(TForm)
ListView1: TListView;
SpeedButton1: TSpeedButton;
OpenDialog1: TOpenDialog;
ImageViewer1: TImageViewer;
procedure SpeedButton1Click(Sender: TObject);
procedure ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
chosenDirectory: string;
SR: TsearchRec;
Litem: TListViewItem;
implementation
{$R *.fmx}
{ In the form There are Opendialog, ImageViewer, ListView. *}
//when click item in listview, imagefile appear in
procedure TForm1.ListView1ItemClick(const Sender: TObject;
const AItem: TListViewItem);
var
Image1: TBitmap;
begin
//if already imageviewer1.bitmap assigned then free it for initializing imageviewer
//Question1: I suppose it make easy memory load or some conflict. Just feeling. Am I right?
if Assigned(ImageViewer1.Bitmap) then
begin
ImageViewer1.Bitmap.Clear(0);
end;
//Question2: There is afterimage look like mosaic. Why? I freed image before load.
try
Image1 := TBitmap.CreateFromFile(chosenDirectory + '\' + ListView1.Items
[ListView1.Selected.Index].Text);
Image1.Resize(round(ImageViewer1.Width)-100, round(ImageViewer1.Canvas.Height)-100);
ImageViewer1.Bitmap.Assign(Image1);
finally
Image1.Free;
end;
end;
//List files in selected directory to Listview
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Res: Integer; // count number of files
begin
if SelectDirectory('Select a directory', 'C:\', chosenDirectory) then
begin
//find file in the Directry and assign the result to SR
Res := FindFirst(chosenDirectory + '\*.*', faAnyFile, SR);
if Res = 0 then
repeat
//and give the result SR to ListView as Itrm as SR.name
Litem := ListView1.Items.Add();
Litem.Text := SR.Name;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
end.