View Full Version : سوال: مشکل در استفاده از CopyRect
mbshareat
یک شنبه 22 دی 1398, 00:31 صبح
سلام
میخوام قسمت بالای یک تصویر رو با قسمت پایین یک تصویر دیگه ترکیب کنم
این کد رو امتحان کردم فقط چند تا نقطه سیاه به وسط تصویر اضافه کرد..جریان چیه؟
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));
mbshareat
یک شنبه 22 دی 1398, 21:46 عصر
عجیبه این کد هم مفید نبود:
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;
mbshareat
یک شنبه 22 دی 1398, 22:04 عصر
نمی دونم چرا در یه برنامه به کد بالا گیر نداد در یه برنامه دیگه به نوع انتساب آخر کد گیر داد:
این کد برای ترکیب تصویر دو 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 بدست بیاد!
mbshareat
یک شنبه 22 دی 1398, 22:14 عصر
دیگه نمی دونم چه کار کنم..یه کد ساده به نظر میاد.
یه بار فکر کردم نکنه عمق بیت رو باید 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;
کسی تا حالا از این کارها کرده راهنمایی کنه؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.