急急急急急急急急急!图像爱好者们大家都进呀,!!!!!!!!!!!!! ( 积分: 50 )

  • 主题发起人 主题发起人 爱delphi
  • 开始时间 开始时间

爱delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个图像的裁剪功能,我是这样想的:在一个label组件上加入两个image组件,其中那个image1组件是用做裁剪尺寸的,而image2是我要裁剪的组件,它们两个是同高的,那怎么在image2上裁剪image1大小的图像呀?能不能可以用一下语句呀:image2.canvas.draw(image1.width,image2.height,bitmagp)如果那位有好的实现方法可要帮帮我呀!还有一个问题:怎么实现用一个滑动条通过鼠标拖动的方式动态的改变它的数值吗,并把改后的数值赋值到label组件吗?怎么通过程序来读取图像的rgb,对比度,亮度,包和度,分辩率呀!???我的问题是多了点。希望大家都看看呀,我给大家的分数是少了点,不过我没有分了呀,希望大家理解!!!!!!!!!!!!!!!!!
 
我想做一个图像的裁剪功能,我是这样想的:在一个label组件上加入两个image组件,其中那个image1组件是用做裁剪尺寸的,而image2是我要裁剪的组件,它们两个是同高的,那怎么在image2上裁剪image1大小的图像呀?能不能可以用一下语句呀:image2.canvas.draw(image1.width,image2.height,bitmagp)如果那位有好的实现方法可要帮帮我呀!还有一个问题:怎么实现用一个滑动条通过鼠标拖动的方式动态的改变它的数值吗,并把改后的数值赋值到label组件吗?怎么通过程序来读取图像的rgb,对比度,亮度,包和度,分辩率呀!???我的问题是多了点。希望大家都看看呀,我给大家的分数是少了点,不过我没有分了呀,希望大家理解!!!!!!!!!!!!!!!!!
 
newbmp.Canvas.CopyRect(Rect(0,0,100,120),newimage.Canvas,Rect(0,0,100,120));拷贝图像到NEWBMP,NEWIMAGE为源图像区
以下是读取RGB及调整RGB的过程和函数.
Color1 := Bmp.Canvas.Pixels[(bmp.Width div 8)*8+i3,y];// redbyte:=getRvalue(color1);//取R值
GrnByte :=getGvalue(color1);//取G值
blueByte :=getBvalue(color1);//取B值
调整RGB函数:
fcunction changergb(Bmp,Bmp1:Tbitmap;Red,Green,Blue:integer):boolean
var
SrcRow, DestRow:pRGBArray;
i,j:integer;
begin
try
for i := 0 to Bmp.Height- 1 do
begin
SrcRow := Bmp.ScanLine;
DestRow :=Bmp1.ScanLine;
for j := 0 to Bmp.Width - 1 do
begin
if Red> 0 then
DestRow[j].rgbtRed := Min(255, SrcRow[j].rgbtRed + Red)
else
DestRow[j].rgbtRed := Max(0, SrcRow[j].rgbtRed + Red);

if Green> 0 then
DestRow[j].rgbtGreen := Min(255, SrcRow[j].rgbtGreen +Green)
else
DestRow[j].rgbtGreen := Max(0, SrcRow[j].rgbtGreen +Green);

if Blue> 0 then
DestRow[j].rgbtBlue := Min(255, SrcRow[j].rgbtBlue +Blue)
else
DestRow[j].rgbtBlue := Max(0, SrcRow[j].rgbtBlue +Blue);
end;
end;
except
messagebox(handle,'error change picture','information',64);
end;
end;
 
newbmp.Canvas.CopyRect(Rect(0,0,100,120),newimage.Canvas,Rect(0,0,100,120));这个我理解呀,那怎么在image2上裁剪image1大小的图像呀那是没有坐标啊,你那个语句能不能这样改呀,newbmp.Canvas.CopyRect(Rect(0,0,image1.width,image1.height),newimage.Canvas,Rect(0,0,image1.width,image1.height));
我这样想也是因为我想裁剪和image1(背景图像)一样大小的图像呀,
能不能说的明白点呀,能不能把源程序写出来呀????
 
图片剪裁的话,bitblt这个API函数也很方便的
 
你是不是想在IMAGE2上裁减一个大小为image1大小的图像.这样的话,你要先确定image1的大小,而且image1的尺度不能大于image2,不知道我的理解有没有错.
 
是这样的呀,那个image1的大小可以用image1.width和image1.height来确定吧,主要是那个image1的坐标不知道怎么确定呀,如果用rect(0,0,image1.width,image1.height)语句。那剪切的应该是从屏幕左上角开始的吧,这个问题我好几天也没有明白!!!?
 
在一个label组件上加入两个image组件?是不是为了滚动条?ScrollBox就实现可以啊。image的位置可以通过ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);得到啊。
 
后退
顶部