我在作图像处理,遇到一个奇怪的问题。对图像进行对比度、亮度的调节时,如果设断点,就一只能执行,若不设断点,则只能执行一次。这是为什么呢??
解决方案 »
- DBgride
- 关于在TChart上画线的问题?(十分紧急,解决问题马上给分)谢谢先!
- 怎么通过代码设置文件的版本号?
- 来来来,看看这段代码!
- *****Corba编程系列之一:D7中没有CorbaConnetion了,这样连接数据库可以吗*****
- 求助:用QReport时,怎样在detail中动态生成TQRLabel?一定给分
- 散分:开发程序直接从Delphi4 升级到 Delphi7 好不好?
- 如何象金山毒霸那样,把所有目录树列出来,并在前面加对号?
- 如何在delphi中控制大量的相同控件
- 关于DBGRID的问题,很简单,请指教!
- 如何取得屏目上某点的颜色?在线等qq66639527
- ☆☆☆☆☆Delphi制作标准Dll 函数如何接受外部自定义的类型的参数~~?
brightness: integer; // 亮度,范围:0-255
contrast: integer; // 对比度,范围:-255-255
displayingray: boolean; // 是否显示为灰度,TRUE为灰度
reversedisplay: boolean; // 是否显示负片效果,TRUE为负片
colorfilter: byte; // 颜色过滤:1=滤赤色,2=荧光色
x1,y1,x2,y2: integer); // 处理区域
var
thew,theh: integer;
i,j: integer;
p: pbytearray;
colorlevel: int64;
sty,stx,eny,enx: integer;
bripos,conpos: integer;
sum1,sum2,sum3: int64;
ave1,ave2,ave3: integer;
times: integer;
rlevel,glevel,blevel: integer;
maxnum,minnum: integer;
begin
mybitmap.PixelFormat :=pf24bit;
conpos:=contrast+100;
times:=conpos;
if conpos>100 then times:=conpos*conpos div 100;
with mybitmap do
begin
thew:=width;
theh:=height;
if (x1=x2) or (y1=y2) then
begin
x1:=1;
y1:=1;
x2:=thew-1;
y2:=theh-1;
end
else
begin
minnum:=min(y1,y2);
maxnum:=max(y1,y2);
y1:=minnum;
y2:=maxnum;
minnum:=min(x1,x2);
maxnum:=max(x1,x2);
x1:=minnum;
x2:=maxnum;
end;
if x1<1 then x1:=1;
if y1<1 then y1:=1;
if x2>thew-1 then x2:=thew-1;
if y2>theh-1 then y2:=theh-1;
sum1:=0;
sum2:=0;
sum3:=0;
for i:=y1 to y2 do
begin
p:=scanline[i];
for j:=x1 to x2 do
begin
sum1:=sum1+p[j*3+2];
sum2:=sum2+p[j*3+1];
sum3:=sum3+p[j*3];
end;
end;
ave1:=sum1 div ((y2-y1+1)*(x2-x1+1));
ave2:=sum2 div ((y2-y1+1)*(x2-x1+1));
ave3:=sum3 div ((y2-y1+1)*(x2-x1+1));
for i:=y1 to y2 do
begin
p:=scanline[i];
for j:=x1 to x2 do
begin
colorlevel:=((p[j*3+2]-ave1)*times div 100)+ave1+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3+2]:=colorlevel;
colorlevel:=((p[j*3+1]-ave2)*times div 100)+ave2+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3+1]:=colorlevel;
colorlevel:=((p[j*3]-ave3)*times div 100)+ave3+brightness;
if colorlevel>255 then colorlevel:=255;
if colorlevel<0 then colorlevel:=0;
p[j*3]:=colorlevel;
if colorfilter=1 then
p[j*3+2]:=0;
if colorfilter=2 then
begin
p[j*3+2]:=0;
p[j*3]:=0;
end;
if displayingray then
begin
rlevel:=p[j*3+2];
glevel:=p[j*3+1];
blevel:=p[j*3];
colorlevel:=rlevel*rlevel+glevel*glevel+blevel*blevel;
colorlevel:=colorlevel div (rlevel+glevel+blevel+1);
p[j*3]:=colorlevel;
p[j*3+1]:=colorlevel;
p[j*3+2]:=colorlevel;
end;
if reversedisplay then
begin
p[j*3]:=$ff-p[j*3];
p[j*3+1]:=$ff-p[j*3+1];
p[j*3+2]:=$ff-p[j*3+2];
end;
end;
end;
end;
end;
放了一个trackbar
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
bmpbright(imagej[0].picture.Bitmap,trackbar1.Position,trackbar2.Position,true,true,1,0,0,imagej[0].picture.Bitmap.width,imagej[0].Picture.Bitmap.Height);
end;