PDA

View Full Version : تبدیل سانتی متر به pixel



mahboube
پنج شنبه 30 دی 1389, 11:22 صبح
سلام دوستان چطوری میشه سانتی متر رو به پیکسل تبدیل کرد؟

اینارم دارم ولی جواب نمیده:


Graphics g = this.CreateGraphics();
pixels= centimeters*g.DpiX/2.54;


بعضی دوستان گفتن از این تابع استفده میشه ولی نمیدونم چطوری؟
getdevicecap

ممنون میشم اگر کدشو بزارید.

ricky22
جمعه 01 بهمن 1389, 19:15 عصر
سلام.
pixels = cm / 2.54 * dpi
برای DPI هم از این کد استفاده کن.

int wid = Screen.PrimaryScreen.WorkingArea.Width;
int ht = Screen.PrimaryScreen.WorkingArea.Height;

mahboube
شنبه 02 بهمن 1389, 08:51 صبح
سلام.
pixels = cm / 2.54 * dpi
برای DPI هم از این کد استفاده کن.

int wid = Screen.PrimaryScreen.WorkingArea.Width;
int ht = Screen.PrimaryScreen.WorkingArea.Height;

این فرمولم غلطه از width ,height چطوری dpi رو بدست بیارم؟؟؟

ricky22
شنبه 02 بهمن 1389, 15:01 عصر
این فرمولم غلطه از width ,height چطوری dpi رو بدست بیارم؟؟؟
چطور غلطه؟!

int CentimeterToPixel(int Centimeter)
{
double pixel = -1;
using (Graphics g = this.CreateGraphics())
{
pixel = Centimeter * g.DpiY / 2.54d;
}
return (int)pixel;
}

mahboube
شنبه 02 بهمن 1389, 15:58 عصر
من نیمدونم چرا وقتی resoloution سیستمو عوض میکنم این dpiy ثابت میمونه.همیشه 96
البته جالبه .من یک pnel رو پرینت میگیرم.تو رزولوشن های مختلف اندازش(موقع نمایش)بزرگ و کوچیک میشه.ولی موقع پرینت دقیقا همون اندازه ای یه که خودم بهش داد.چرا؟؟

ricky22
شنبه 02 بهمن 1389, 16:53 عصر
میشه سناریو را تشریح کنید شاید اصلا نیازی به این کارا نباشه.

mahboube
یک شنبه 03 بهمن 1389, 10:11 صبح
ببینید من یک panel دارم که می خوام ازش پرینت بگیرم.
و میخوام کاربر اندازشو بر حسب میلیمتر تنظیم کنه.خب توی برنامه باید این میلیمتر به پیکسل تبدیل شه و برای اندازه پنل استفاده شه.
سوال:آیا کاردرستیه من از پنل استفاده کنم برای اینکار؟اگه نه چطوری مثلا یک مستطیل بااندازه مشخص به سانتی متر رو چاپ کنم؟
2-الن بااین فرمول داره جواب میده یعنی موقع چاپ فرق نمی کنه رزولوشن چی باشه اندازه ها درسته.آیا روی هیچ سیستمی ممکنه فرق کنه؟یعنی درست چاپ نشه؟

ricky22
یک شنبه 03 بهمن 1389, 10:31 صبح
ببینید من یک panel دارم که می خوام ازش پرینت بگیرم.
و میخوام کاربر اندازشو بر حسب میلیمتر تنظیم کنه.خب توی برنامه باید این میلیمتر به پیکسل تبدیل شه و برای اندازه پنل استفاده شه.
سوال:آیا کاردرستیه من از پنل استفاده کنم برای اینکار؟اگه نه چطوری مثلا یک مستطیل بااندازه مشخص به سانتی متر رو چاپ کنم؟
2-الن بااین فرمول داره جواب میده یعنی موقع چاپ فرق نمی کنه رزولوشن چی باشه اندازه ها درسته.آیا روی هیچ سیستمی ممکنه فرق کنه؟یعنی درست چاپ نشه؟
سلام.
خب چرا از خیل عظیم ابزار های گزارش سازی استفاده نمی کنید؟ که انعطاف پذیری زیادی در پرینت گرفتن و تعیین سایز دارند.
در مورد سوال دوم چون تا به حال این کار را نکردم نمی دونم. امتحان کنید.
موفق باشید.

mahboube
یک شنبه 03 بهمن 1389, 10:37 صبح
روی panel یک سری label ها هست که کاربر جاشون رو تنظیم میکنه.
ابزار های گزارش سازی اینجا فکر نمیکنم بدرد من بخوره!!

ricky22
یک شنبه 03 بهمن 1389, 10:51 صبح
هممممم.
پس شما دارید پنل را به یک Graphic Object تبدیل می کنید و پرینت می گیرید.
مثلا :

DllImport("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);

private const Int32 SRCCOPY = 0xCC0020;

private Bitmap memImage;

private void PrepareImage()
{
Graphics graphic = this.CreateGraphics();
Size s = this.Size;
memImage = new Bitmap(s.Width, s.Height, graphic);
Graphics memGraphic = Graphics.FromImage(memImage);
IntPtr dc1 = graphic.GetHdc();
IntPtr dc2 = memGraphic.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width,
this.ClientRectangle.Height,dc1, 0, 0, SRCCOPY);
graphic.ReleaseHdc(dc1);
memGraphic.ReleaseHdc(dc2);
}

private void button1_Click(object sender, System.EventArgs e)
{
PrepareImage();
printDocument1.Print();
}

private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memImage,0,0);
}
خب فکر می کنم با این کد راحت تر بشه سایز را تنظیم کرد؟

mahboube
یک شنبه 03 بهمن 1389, 11:08 صبح
خب این چه فرقی کرد.مسئلع تبدیل پیکسل به سانتی متر و برعکسه!!

tooraj_azizi_1035
یک شنبه 03 بهمن 1389, 13:38 عصر
سلام،
CodeProject: http://www.codeproject.com/KB/cs/Unit_Conversion_Sample.aspx
Microsoft: http://support.microsoft.com/default.aspx?scid=kb;en-us;127152
:قلب::قلب::قلب::قلب::قلب::قلب:: لب::قلب::قلب::قلب::قلب::قلب::ق ب::قلب::قلب::قلب::قلب::قلب::قل ::قلب::قلب::قلب::قلب::قلب::قلب: