View Full Version : تقسیم یه عکس توسط برنامه
rmb_ali
چهارشنبه 03 بهمن 1386, 07:52 صبح
دوستان من یه عکس بزرگ دارم که میخوام اونو به قطعات کوچیک تقسیم کنم عکس من 7861*5475 هست که میخوام اونو به قطعات 320*240 تقسیم کنم آیا از طریق دلفی میتونم و اگر میشه طریقه کار به چه صورتیه
hossein taghi zadeh
چهارشنبه 03 بهمن 1386, 09:32 صبح
با سلام
از متد CopyRect مربوط به Canvas استفاده نمائید.
Const
iWidth = 240;
iHeight = 320;
Var
SourceRect, DestRect: TRect;
Begin
// SourceRect for rect of source image i.e imgMain
SourceRect := Rect(0, 0, iWidth, iHeight);
// DestRect for rect of source image copying on TempBmp
DestRect := Rect(0, 0, iWidth, iHeight);
imgMain.Canvas.CopyRect(DestRect, TempImage.Canvas, SourceRect);
End;
rmb_ali
چهارشنبه 03 بهمن 1386, 10:38 صبح
اگر فرمت تصویر jpg و یا png بود میتونم از همین روالها استفاده کنم در ضمن میشه یه توضیحی هم در مورد ذخیره تصویر کپی شده نیز بفرمایید
rmb_ali
چهارشنبه 03 بهمن 1386, 11:53 صبح
این کدی که من نوشتم رو ببینید این فایل هایی که تشکیل میده همش یه تصویر یکسانه میشه توضیح بدید
var
MyRect, MyOther: TRect;
i,j:integer;
begin
image1.Picture.LoadFromFile('e:\TEST.bmp');
for i:=0 to 32 do
for j:= 0 to 17 do
begin
MyRect := Rect(i*240,j*320,(i*240)+240,(j*320)+320);
MyOther := Rect(i*240,j*320,(i*240)+240,(j*320)+320);
// image2.Canvas.BrushCopy(MyRect, i, MyRect, clBlack);
image2.Canvas.CopyRect(MyOther,image1.Canvas,MyRec t);
image2.Picture.SaveToFile('e:\S'+INTTOSTR(I)+INTTO STR(J)+'.bmp');
end;
end;
hossein taghi zadeh
چهارشنبه 03 بهمن 1386, 19:02 عصر
با سلام
این فایل هایی که تشکیل میده همش یه تصویر یکسانه میشه توضیح بدی
اشکال از تابع CopyRect می باشد.
image2.Canvas.CopyRect(MyOther,image1.Canvas,MyRec t);
بر اساس مستطیل myRect قسمتی از کنترل image1 به مستطیل MyOther از کنترل image2 کپی می شود.
procedure TfrmMain.btnPuzzleClick(Sender: TObject);
Const
iWidth = 240;
iHeight = 320;
Var
I, J: Integer;
SrcR, DstR: TRect;
bmpDest, bmpSrc: TBitmap;
Begin
bmpSrc := TBitmap.Create;
bmpDest := TBitmap.Create;
bmpDest.Width := iWidth;
bmpDest.Height := iHeight;
bmpSrc.LoadFromFile('E:\F.bmp');
DstR := Rect(0, 0, iWidth, iHeight);
For I := 0 To (bmpSrc.Height Div iHeight) Do
Begin
For J := 0 To (bmpSrc.Width Div iWidth) Do
Begin
SrcR := Rect(J * iWidth, I * iHeight, (J+1) * iWidth, (I+1) * iHeight);
bmpDest.Canvas.CopyRect(DstR, bmpSrc.Canvas, SrcR);
bmpDest.SaveToFile('E:\S' + IntToStr(I) + '-' + IntToStr(J) + '.bmp');
End;
End;
bmpSrc.Free;
bmpDest.Free;
End;
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.