PDA

View Full Version : بدست آوردن مختصات شکل



Mask
دوشنبه 29 تیر 1388, 03:21 صبح
با سلام به دوستان
من یک شکل مربع دارم فرقی نمی کنه هم تو دلفی می تونم بکشم و اگه ممکن باشه با فوتوشاپ.
می خام این عکس رو به برنامم بدم و برنامه پیکسل به پیکسل x,y های این شکل رو بهم بده.یا اینکه top , left رو بده فرقی نمی کنه.
اولا چطوری برنامه از روی عکس میفهمه که به خط رسیده و شروع کنه و x,y یک نقطه رو بده؟
ممنون از دوستان اگه کمکم کنند.

Felony
دوشنبه 29 تیر 1388, 09:02 صبح
طبه وسیله ی 2 تا حلقه ی تو در تو شروع میکنید و پیکسل به پیکسل فرم برنامه رو میخونید و داخل حلقه ها یه شرط میزارید و تو شرط چک میکنید اگر مختصات نقطه ی [x,y] = رنگ مربع بود ، اونجا میشه مختصات شروع مربع .

Mask
دوشنبه 29 تیر 1388, 14:49 عصر
ممنون دوست عزیز
شما مدیر بخش دلفی پی سی بیزینسی
ممنون از جوابت اما لا اقل یه نمونه کدی سورسی چیزی بزارید . من تا حالا این کار رو نکردم و بلد نیستم(تشخیص نقاط ساه با حلقه تو در تو)

Felony
دوشنبه 29 تیر 1388, 15:19 عصر
نمونه ای رو که گزاشتم ببینید ، در نمونه من یک عکس با فتوشاپ ساختم که داخلش یک مربع مشکی رنگ هست ، در داخل برنامه با 2 تا حلقه ی تو در تو رنگ پیکسلها رو یکی یکی میخونم و رنگ هر کدوم مشکی بود قرمز میکنم ، در آخر مربع رنگش قرمز میشه .

Mask
سه شنبه 30 تیر 1388, 01:12 صبح
ممنون دوست خوبم
من برنامتون رو اجرا کردم و درست کار کرد.اما یه مشکل
من اومدم و یه تغییری تو برنامتون دادم که x,y هر پیکسلی رو بریزم تو یه فایل tex اما نمی دونم چرا برنامه قاطی میکنه و کل عکس رو قرمز میکنه.
برنامه رو میزارم اگه وقت شد یه نگاه بهش بندازید.
ممنون

Felony
سه شنبه 30 تیر 1388, 06:55 صبح
مشکل این هست که شما برای شرط باید بلاک شروع و پایان ( Begin و End ) تعریف میکردین .


var
i,j:Integer;
Color:Tcolor;
begin
for i:=0 to Image1.Width do begin
for j:=0 to Image1.Height do begin
Color:=Image1.Canvas.Pixels[i,j];
if Color=CLBlack then begin
Image1.Canvas.Pixels[i,j]:=CLRed;
Edit1.Text:=IntToStr(i);
Edit2.Text:=IntToStr(j);
Memo1.Lines.Append(IntToStr(i));
Memo2.Lines.Append(IntToStr(j));
Memo1.Lines.SaveToFile('c:\1.txt');
Memo2.Lines.SaveToFile('c:\2.txt');
end;
end;
end;
end;

از TStringList استفاده کنید بهتره :

var
i,j:Integer;
Color:Tcolor;
List:TStringList;
begin
List:=TStringList.Create;
for i:=0 to Image1.Width do begin
for j:=0 to Image1.Height do begin
Color:=Image1.Canvas.Pixels[i,j];
if Color=CLBlack then begin
Image1.Canvas.Pixels[i,j]:=CLRed;
List.Add('X='+IntToStr(i)+'Y='+IntToStr(j));
end;
end;
end;
List.SaveToFile('Status.txt');
end;

Mask
چهارشنبه 31 تیر 1388, 17:53 عصر
سلام آقا مجتبی
ممنون ازت کلی کارم راه افتاد.
نگا من خودم یه برنامه نوشتم بر عکس برنامه شما مختصات رو می گیره شکلو ترسیم می کنه.
یه مشکل برنامه شما درست شکل رو نمی فهمه.
و مختصاتی که می ده کامل نیست.
برا مثال :
دوتا برنامه بهت میدم 1 و 2 اول یک رو اجرا کن بعد 2 رو تا بفهمی چی می گم.
فایل های exe رو اجرا کن.

Felony
چهارشنبه 31 تیر 1388, 20:23 عصر
دیگه اون رو خودتون باید بهینش بکنید ، کمی وقت و حوصله لازم داره .