مشکل در استفاده از CopyRect
سلام
میخوام قسمت بالای یک تصویر رو با قسمت پایین یک تصویر دیگه ترکیب کنم
این کد رو امتحان کردم فقط چند تا نقطه سیاه به وسط تصویر اضافه کرد..جریان چیه؟
Image1.Picture.Bitmap.Canvas.CopyRect(Rect(0,Image 1.Height Div 2,Image1.Width,Image1.Height-Image1.Height Div 2+1)
,Image2.Picture.Bitmap.Canvas,Rect(0,Image1.Height Div 2,Image1.Width,Image1.Height-Image1.Height Div 2+1));
نقل قول: مشکل در استفاده از CopyRect
عجیبه این کد هم مفید نبود:
var
X,Y:Word;
P,P2: pRGBArray;
...
For Y:=(B.Height Div 2) to B.Height-1 Do
Begin
P:=B.ScanLine[Y];
P2:=B2.ScanLine[Y];
For X:=0 to B.Width-1 Do
P[X]:=P2[X];
End;
نقل قول: مشکل در استفاده از CopyRect
نمی دونم چرا در یه برنامه به کد بالا گیر نداد در یه برنامه دیگه به نوع انتساب آخر کد گیر داد:
این کد برای ترکیب تصویر دو Image کار کرد:
procedure TForm1.Button1Click(Sender: TObject);
var
X,Y:Word;
P,P2: pRGBArray;
B,B2:TBitmap;
begin
B:=Image1.Picture.Bitmap;
B2:=Image2.Picture.Bitmap;
For Y:=(B.Height Div 2) to B.Height-1 Do
Begin
P:=B.ScanLine[Y];
P2:=B2.ScanLine[Y];
For X:=0 to B.Width-1 Do
Begin
P[X].rgbtRed:=P2[X].rgbtRed;
P[X].rgbtGreen:=P2[X].rgbtGreen;
P[X].rgbtBlue:=P2[X].rgbtBlue;
End;
End;
Image1.Refresh;
end;
اما در برنامه نهاییم کار نمی کنه و نمی دونم چرا موجب مکث دو سه ثانیه ای میشه.با اینکه اینجور کار با بیت مپ خیلی سریعه!
این کد در برنامه نهایی کاملا بیفایده بود:
Bmp1.Assign(B);
For Y:=(B.Height Div 2) to B.Height-1 Do
Begin
P:=B.ScanLine[Y];
P2:=PrePageBmp.ScanLine[Y];
For X:=0 to B.Width-1 Do
Begin
P[X].rgbtBlue:=P2[X].rgbtBlue;
P[X].rgbtGreen:=P2[X].rgbtGreen;
P[X].rgbtRed:=P2[X].rgbtRed;
End;
End;
Bmp1.SaveToFile('C:\A.bmp');
PrePageBmp.SaveToFile('C:\B.bmp');
B.SaveToFile('C:\C.bmp');
A.Bmp , C.Bmp مثل هم میشند با اینکه C.Bmp باید از ترکیب A.Bmp ,B.Bmp بدست بیاد!
نقل قول: مشکل در استفاده از CopyRect
دیگه نمی دونم چه کار کنم..یه کد ساده به نظر میاد.
یه بار فکر کردم نکنه عمق بیت رو باید 24 بیت کنم دیدم نه نیاز نیست برای فیلترهای تصویری که اعمال کردم چنین کاری نکردم.
این کد هم کار نکرد:
procedure Combine2Bmps(TopBmp,BottomBmp:TBitmap;var CombinedBmp:TBitmap);
Var
X,Y:Word;
P,P2: pRGBArray;
begin
For Y:=(TopBmp.Height Div 2) to TopBmp.Height-1 Do
Begin
P:=TopBmp.ScanLine[Y];
P2:=BottomBmp.ScanLine[Y];
For X:=0 to TopBmp.Width-1 Do
Begin
P[X].rgbtBlue:=P2[X].rgbtBlue;
P[X].rgbtGreen:=P2[X].rgbtGreen;
P[X].rgbtRed:=P2[X].rgbtRed;
End;
End;
CombinedBmp.Assign(TopBmp);
end;
با اینکه در مورد اون دو تا Image اینطوری کار می کنه:
procedure TForm1.Button1Click(Sender: TObject);
var
X,Y:Word;
P,P2: pRGBArray;
B,B2:TBitmap;
begin
B:=Image1.Picture.Bitmap;
B2:=Image2.Picture.Bitmap;
Combine2Bmps(B,B2,B);
Image1.Refresh;
end;
کسی تا حالا از این کارها کرده راهنمایی کنه؟