一段c代码,帮忙转换成delphi代码(50分)

  • 主题发起人 主题发起人 3wccdel
  • 开始时间 开始时间
3

3wccdel

Unregistered / Unconfirmed
GUEST, unregistred user!
void CMyDoc::OnCloudSort()
{
int i,j,n,k,m,l;
//必须先做云检测
int flag,t;
float qqf;
CString OutMessage;

flag=1;//第几块云团
for(i=0;i<Width;i++)
for(j=0;j<Height;j++)
{
if(ShowBuffer[j*Width+i]!=0&&StatsticBuffer[j*Width+i]==-1)
//ShowBuffer[j*Width+i]!=0表示为云团
//StatsticBuffer[j*Width+i]==-1表示没有被遍历过,也就是说该点没有被判别为哪块云
{
StatsticBuffer[j*Width+i]=flag;
find(i,j,ShowBuffer,flag);
flag++;
}
}
}

//buf 所要进行划分的数组
void CMyDoc::find(int i,int j, unsigned char *buf,int flag)
{
int x,y,n,k,l;
POINT* stack=new POINT[Width*Height];//图像的宽度*高度Width*Height
n=0;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
{
if((j+l)>=0&&(j+l)<Height&&(i+k)>=0&&(i+k)<Width)
{
if(buf[(j+l)*Width+i+k]!=0&&StatsticBuffer[(j+l)*Width+i+k]==-1)
{
StatsticBuffer[(j+l)*Width+i+k]=flag;
stack[n].x=i+k;
stack[n].y=j+l;
n++;
}
}
}
while(n>0)
{
n--;
x=stack[n].x;
y=stack[n].y;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
{
if((y+l)>=0&&(y+l)<Height&&(x+k)>=0&&(x+k)<Width)
{
if(buf[(y+l)*Width+x+k]!=0&&StatsticBuffer[(y+l)*Width+x+k]==-1)
{
StatsticBuffer[(y+l)*Width+x+k]=flag;
stack[n].x=x+k;
stack[n].y=y+l;
n++;
}
}
}
}
delete stack;
}
 
做图像检测吗?都不是重要部分哦。
 
是自动判别图像中有几个不规则图形
 
//buf 所要进行划分的数组
procedure CMyDoc.find(i,j:integer; buf:array of byte; flag:integer) ;
var
x,y,n,k,l : integer;
stack : ^POINT ;
begin
New(stack) ;
Stack := POINT[Width*Height];//图像的宽度*高度Width*Height
n := 0;
for k:=-1 to 1 do
for l:=-1 to 1 do
if (j+l>=0) and (j+l<Height) and (i+k>=0) and (i+k<Width) then
if (buf[(j+l)*Width+i+k]<>0) and (StatsticBuffer[(j+l)*Width+i+k]=-1) then
begin
StatsticBuffer[(j+l)*Width+i+k] := flag;
stack[n].x := i+k;
stack[n].y := j+l;
Inc(n);
end ;

while n>0 do
begin
Dec(n);
x := stack[n].x;
y := stack[n].y;
for k:=-1 to 1 do
for l:=-1 to 1 do
if (y+l>=0) and (y+l<Height) and (x+k>=0) and (x+k<Width) then
if (buf[(y+l)*Width+x+k]<>0) and (StatsticBuffer[(y+l)*Width+x+k]<>-1) then
begin
StatsticBuffer[(y+l)*Width+x+k] :=flag;
stack[n].x := x+k;
stack[n].y := y+l;
Inc(n);
end ;
end ;
Dispose(stack) ;
end ;

procedure CMyDoc.OnCloudSort ;
var
i,j,n,k,m,l : integer;
//必须先做云检测
flag,t : integer;
qqf : double ;
OutMessage : string;
begin
flag := 1;//第几块云团
for i:=0 to Width-1 do
for j:=0 to Height-1 do
if (ShowBuffer[j*Width+i]<>0) and (StatsticBuffer[j*Width+i]=-1) then
//ShowBuffer[j*Width+i]!=0表示为云团
//StatsticBuffer[j*Width+i]==-1表示没有被遍历过,也就是说该点没有被判别为哪块云
begin
StatsticBuffer[j*Width+i] := flag;
find(i,j,ShowBuffer,flag);
Inc(flag);
end ;
end ;
 
to pascal!:
1:编译时在Stack := POINT[Width*Height];//图像的宽度*高度Width*Height
这里出错。
2。编译时在find(i,j,ShowBuffer,flag);
的ShowBuffer出错。
3。delphi不认识 stack : ^POINT ;的类型。
 
你给的程序里没POINT,ShowBuffer,StatsticBuffer的定义,要看程序的其他部分.
 
谢谢!!
ShowBuffer,StatsticBuffer定义为全局变量
POINT定义为Tpoint
问题解决。
 
后退
顶部