gpt4 book ai didi

multithreading - Delphi图像处理同步线程

转载 作者:行者123 更新时间:2023-12-03 15:45:17 24 4
gpt4 key购买 nike

我必须在主窗体中处理一张图像,但是对于我使用线程的增量速度来说,处理速度很低...

我的线程代码:

type
TPaintThread = class(TThread)
Source,Mask :TBitmap ;
image : TImage;
public
procedure SetAll(src,msk:TBitmap;img:TImage);
private
procedure DoWritePix;
var
mBit : TBitmap ;

protected
procedure Execute; override;
end;

implementation

procedure TPaintThread.SetAll(src: TBitmap; msk: TBitmap; img: TImage);
begin
Source := src ;
mask := msk ;
img := img ;
mBit := TBitmap.Create ;
end;

procedure TPaintThread.DoWritePix;
begin
image.Picture.Bitmap := mBit ;
end;

procedure TPaintThread.Execute;
var
i: Integer;
j: Integer;
begin
mBit.Width := Source.Width ;
mBit.Height := Source.Height ;
for i := 1 to Source.Width do
for j := 1 to Source.Width do
begin
// my processing event
end;
// result := mBit ;
// write on form image
Synchronize(DoWritePix);
end;

我在计时器上使用它:

procedure TForm1.tmr1Timer(Sender: TObject);
var
pThread : TPaintThread ;
begin
pThread := TPaintThread.Create(True) ;
pThread.SetAll(MyBmp,mask,img1);
pThread.Resume ;
pThread.FreeOnTerminate := True ;
end;

但是我在运行时的 DoWritePix 中出现错误:

First chance exception at $005A81DE. Exception class $C0000005 with message 'access violation at 0x005a81de: read of address 0x000001b8'. Process myexe.exe (6032)
First chance exception at $754E9617. Exception class EAccessViolation with message 'Access violation at address 005A81DE in module 'myexe.exe'. Read of address 000001B8'. Process myexe.exe (6032)

我的问题:这种方式对于在主窗体中编辑图像是否正确?如果不是,在线程上访问和写入的正确方法是什么?如果是的话我该如何解决问题?

最佳答案

这段代码是错误的:

procedure TPaintThread.SetAll(src: TBitmap; msk: TBitmap; img: TImage);
begin
Source := src ;
mask := msk ;
img := img ; // OOPS!
mBit := TBitmap.Create ;
end;

当你写 img := img; 时,你什么也没做——这是一个空操作。你的意思是写:

image := img;

这就是为什么 DoWritePiximagenil 的原因,这解释了访问冲突。

当您遇到运行时错误时,不要束手无策。在调试器下运行代码,让调试器告诉你哪个变量没有初始化。

关于multithreading - Delphi图像处理同步线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14238746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com