# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET > سوال: تغییر واحد سانتی متر به Pixel

## rasoul2023

سلام دوستان :

من یه Picture Box دارم که میخوام اندازه های اونو تغییر بدم از کد زیر این کار را نجام میدم . 

PictureBox1.Size = New Size(TextBox1.Text, TextBox2.Text)


خوب حالا مسئله اینجاست که مقادیر ورودی بر حسب سانتی متر هستند و فرمت Scale با Picture box یکی نیست . یعنی اینکه باید سانتی متر را به واحد طولی Picture box تبدیل کنم . آیا راهی هست ؟ 
واحد اندازه گیری Picture box همون Pixel یا Towip ؟؟؟؟

----------


## gigidagostino

سلام 			 			1.  Determine the dpi resolution of your target.

2.  For inches:  pixels = inches * dpi

3.  For cm:  pixels = cm / 2.54 * dpi
ببخشید ترجمشم میگم:
DPI رو محاسبه کنید
 برای سانتیمتر از pixels = cm / 2.54 * dpi
و برای اینچ از  .  pixels = inches * dpi

----------


## gigidagostino

اینم برای Twip اما با #C  

 A twip is 1/1440 of an inch



 private static void SetUpTwipsPerPixel(bool Force /* = false */)
{
if (!Support.m_IsTwipsPerPixelSetUp || Force)
{
Support.m_TwipsPerPixelX = 0;
Support.m_TwipsPerPixelY = 0;
try
{
IntPtr ptr1 =
NativeMethods.GetDC(NativeMethods.NullIntPtr);
if (!ptr1.Equals(NativeMethods.NullIntPtr))
{
Support.m_TwipsPerPixelX = 1440 / ((double)
NativeMethods.GetDeviceCaps(ptr1, 0x58));
Support.m_TwipsPerPixelY = 1440 / ((double)
NativeMethods.GetDeviceCaps(ptr1, 90));

NativeMethods.ReleaseDC(NativeMethods.NullIntPtr, ptr1);
}
}
catch (Exception exception1)
{
ProjectData.SetProjectError(exception1);
ProjectData.ClearProjectError();
}
Support.m_IsTwipsPerPixelSetUp = true;
if ((Support.m_TwipsPerPixelX == 0) ||
(Support.m_TwipsPerPixelY == 0))
{
Support.m_TwipsPerPixelX = 15;
Support.m_TwipsPerPixelY = 15;
VB6Errors.RaiseError(7,
Resources.GetResourceString("Misc_SetUpTwipsPerPix  el"));
}
}
 }

----------


## rasoul2023

> ببخشید ترجمشم میگم:
> DPI رو محاسبه کنید


سلام دوست عزیز منظورتون از dpi را محاسبه کن چیه چطوری میشه محاسبش کرد ؟ واسه من اصلا کیفیت عکس مهم نیست فقط میخوام که Picture box به اندازه سانتی متر که کاربر وارد میکنه بشه و چون واحد اندازه picture box پیکسل هست من این تبدیل را نیاز دارم و کار دیگه ای هم نمیخوام بکنم .

----------


## gigidagostino

سلام. :لبخند گشاده!:  سوالای سخت میپرسید.راستش از روی رزولیشن حساب میشد.هرچی رزولیشن بالا میرفت اینم زیاد میشد.(Dot Per Inch).الان تو ذهنم نیست .عجله دارید؟اگه برای خودتونه معمولا مقدارش یا 96 یا 100 یا 120 هست.

----------


## gigidagostino

Dim dpi As Graphics = Me.CreateGraphics
        MessageBox.Show(String.Format("X={0}, Y={1}", dpi.DpiX, dpi.DpiY))
اینم مقدار dpi رو میده.بزاریش تو اون فورمولا تبدیل رو میتونید انجام بدید

----------


## rasoul2023

ببینید دوست عزیز اینکه میگم نیازی نیست بخاطر اینه که من روی فرمم یه خط کش دارم و اندازه هام که توی هر ریزولیشنی جواب میده را دقیق حساب میکنم . حالا مونده فقط اندازه تصویرم که چون بلد نیستم با موس اندازه هاشو تغییر بدم از این روش دستی استفاده کنم . حالا اگه میدونید چطور میشه یه picture box را توی حالت Run time با موس اندازه هاشو تغییر داد مثل Paint که خوب کارم راه میفته اگه هم نمیدونید که خوب مجبورم از همون حالت دستی استفاده کنم .

----------


## rasoul2023

:گیج:  من که اصلا از اینا سر در نمیارم  :افسرده:  شما مگه نگفتید ضرب در dbi پس این X,Y چیه دیگه مگه Dpi یه عدد نیست ؟ :گریه:  آیا منظور اینه که برای عدد طولی ضرب در dpi ایکس و برای عرض ضرب در Y بشه ؟

----------


## gigidagostino

سلام
نمیدونم عمودی و افقیش چه فرقی دارن.رو سیستم من دوتاش یکه و برابر همون 96 بود.نمیدونم بقیه دوستان چرا کمک نمیکنند؟

----------


## rasoul2023

آقا تشکر . تست کردم همون بود که گفتم برای Width طبق فرمول شما باید در Dpi x  ضرب بشه و برای Height هم در Dpi y البته برای منم هر دوشون 96 بود که میشه تو همون مقدار یکی ( طبق فرمولی که گفته شد ) ضرب کرد اما اگه ریزولیشن تغییر کنه dpi هم تغییر میکنه تو یکی از محور ها ولی از اونجایی که کاربرا تنظیمات خودشون را جوری انجام میدند که صفحه مانیتور از گوشه ها فاصله ای نداشته باشه معمولا و طبق استاندارد یکی هستند ولی خوب اومدیم یکی دوست نداشت تنظیماتش خوب باشه یا کارت گرافیکش مشکل داشت . واسه همین باید هر دو را اعمال کرد . 

آقا بازم ممنون البته تشکر هم ثبت کردم .

----------


## sari-1369

هر 1 سانتی متر برابره با 38  پیکسل . حالا دیگه خودت حساب کن ، هر مقداری که کاربر وارد کرد در 38 ضرب کن .

----------

