PDA

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;