PDA

View Full Version : سوال: بزرگ و کوچک کردن تصویر به شیوه فتوشاپ



khorsandreza
جمعه 11 بهمن 1392, 16:12 عصر
سلام دوستان
من می خواستم یک تصویر با روش فتوشاپ بزرگ یا کوچک کنم
یعنی من وقتی روی تصویر کلیک کرده و کلید ماموس را نگه داشته وقتی ماوس را به سمت راست حرکت دادم تصویر کوچک شود و اگر به سمت چپ حرک دادم بزرگ شود و یا اگر ماوس سمت بالا حرکت دادم عمل کوچک شدن تصویر و به سمت پایین بزرگ شدن اتفاق بیفتد
البته باید عرض کنم در مورد بزرگ یا کوچک کردن تصویر مشکلی ندارم فقط می خواهم دوستان در مورد متدی که گفتم راهنمائی بفرمایند

امیر مهرشاد
جمعه 11 بهمن 1392, 19:30 عصر
من دقیق نمیدونم ولی حتما باید با توابع API ویندوز این کار رو انجام بدید چون فتوشاپ بسته به محل قرارگیری موس روی قسمتی از تصویر بزگنمایی یا کوچک نمایی رو از همونجا آغاز میکنه یا اگه DLL خاصی استفاده کنید و یکار جالب و شیکی از آب در میاد امیدوارم موفق باشید

Ananas
جمعه 11 بهمن 1392, 23:51 عصر
سلام.
این یک مثاله. الباقی با خودتون:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CurrentPos, Pos, Movement : TPoint;
begin
GetCursorPos(CurrentPos);
while ((GetAsyncKeyState(VK_LBUTTON) and $8000) <> 0) do
begin
GetCursorPos(Pos);
Movement := Point(
Pos.X - CurrentPos.X,
Pos.Y - CurrentPos.Y);
Self.Canvas.Rectangle(0, 0,
(100 * Movement.X) div 20,
(50 * Movement.X) div 20);
end;
end;

AliReza Vafakhah
شنبه 12 بهمن 1392, 07:33 صبح
می تونید از کامپوننت قوی ImageEN استفاده کنید. شخصا ازش خیلی راضیم.

یوسف زالی
شنبه 12 بهمن 1392, 09:45 صبح
یکی دیگه از کلک های رشتی (!!) به کار رفته استفاده از ProgressBar های مخفیه!!

khorsandreza
شنبه 12 بهمن 1392, 20:04 عصر
یکی دیگه از کلک های رشتی (!!) به کار رفته استفاده از ProgressBar های مخفیه!!

مهندس سلام
من رشتی نیستم . آذری هستم یک مقدار بیشتر توضیح بده

BORHAN TEC
شنبه 12 بهمن 1392, 20:14 عصر
سلام

من رشتی نیستم . آذری هستم یک مقدار بیشتر توضیح بده
فکر می کنم که منظور یوسف از progressbar همون ScrollBox باشه. :چشمک:

khorsandreza
یک شنبه 13 بهمن 1392, 00:03 صبح
سلام.
این یک مثاله. الباقی با خودتون:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CurrentPos, Pos, Movement : TPoint;
begin
GetCursorPos(CurrentPos);
while ((GetAsyncKeyState(VK_LBUTTON) and $8000) <> 0) do
begin
GetCursorPos(Pos);
Movement := Point(
Pos.X - CurrentPos.X,
Pos.Y - CurrentPos.Y);
Self.Canvas.Rectangle(0, 0,
(100 * Movement.X) div 20,
(50 * Movement.X) div 20);
end;
end;

من دقیقا متوجه کد ها نشدم آن کاری که مد نظر من است فکر می کنی از ترکیب اونت های MouseDown و MouseMove باید درست بشه وقتی ماوس فشرده میشه مختصات تصویر در یک متغییر قرار بگیره با حرکت دادن ماوس به راست و چپ تصویر بزرگ یا کوچک بشود.
اگه یه توضیح کوچلو در مورد کدها بدین ممنون میشوم

Ananas
یک شنبه 13 بهمن 1392, 00:17 صبح
من دقیقا متوجه کد ها نشدم آن کاری که مد نظر من است فکر می کنی از ترکیب اونت های MouseDown و MouseMove باید درست بشه وقتی ماوس فشرده میشه مختصات تصویر در یک متغییر قرار بگیره با حرکت دادن ماوس به راست و چپ تصویر بزرگ یا کوچک بشود.
اگه یه توضیح کوچلو در مورد کدها بدین ممنون میشوم
چشم. تو این روش به جای اینکه کد رو چند تیکه کنیم و از ترکیب چند اونت این کار رو انجام بدیم، با استفاده از یک while ، تا زمانی که موس نگه داشته شده باشه حرکت موس نسبت به مکان اول رو میسنجه و تصویر رو بزرگنمایی میکنه.
تابع GetCursorPos مکان فعلیه موس رو در فضای مانیتور برمیگردونه.
تابع GetAsyncKeyState با ورودیه VK_LBUTTON استفاده شده تا بفهمیم دکمه ی چپ موس در حالت فشرده هست یا نه.
جابجایی رو هر بار که محاسبه میکنیم نتیجه رو در متغیر Movement می نویسیم.
Self.Canvas.Rectangle هم که مثال من هست و شما باید تابع بزرگنماییه تصویر خودتون رو به جای این عبارت بنویسید.

یوسف زالی
دوشنبه 14 بهمن 1392, 09:16 صبح
فکر می کنم که منظور یوسف از progressbar همون ScrollBox باشه.

آره اشتباه شد! :قلب: