كيف يمكنني تحديد ارتفاع الخط في اتجاهات مختلفة؟

StackOverflow https://stackoverflow.com/questions/929801

سؤال

الطريقة الشائعة لإنشاء خط مع GDI هي استخدام حجم النقطة المطلوب والدقة الرأسية للجهاز الهدف (DPI) مثل هذا:

LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, GetDeviceCaps(hdc, LOGPIXELSY), 72);
...
HFONT hfont = CreateFontIndirect(&lf);

لتحقيق الافتراضي MM_TEXT وضع تعيين، وهذا يحول النقطة إلى ارتفاع البكسل للجهاز المطلوب. (هذا هو تقريب مشترك. هناك بالفعل 72.27 نقطة في بوصة، وليس 72.) (تعني علامة الطرح التي أريد تحديد ارتفاع الأحرف الفعلية، وليس ارتفاع الخلية.)

إذا كنت أرغب في إنشاء خط جانبي - أي واحد مع اتجاه وزعزعة من 90 درجة - هل يمكنني استخدام LOGPIXELSX بدلا من LOGPIXELSYب بالنسبة لبعض الطابعات التي أستهدفها، فإن القرارات الأفقية والرأسية مختلفة.

عموما، إذا كنت أريد زاوية من theta, ، هل أجتمع LOGPIXELSX و LOGPIXELSYب أنا أفكر في شيء مثل هذا:

// Given theta in degrees (e.g., theta = 45.0) ...
double theta_radians = theta * 2.0 * pi / 360.0;
int dpi = static_cast<int>(GetDeviceCaps(hdc, LOGPIXELSX) * sin(theta_radians) +
                           GetDeviceCaps(hdc, LOGPIXELSY) * cos(theta_radians) +
                           0.5);
LOGFONT lf = {0};
lf.lfHeight = -MulDiv(point_size, dpi, 72);
// Set escapement and orientation to theta in tenths of a degree.
lf.lfEscapement = lf.lfOrientation = static_cast<LONG>(theta * 10.0 + 0.5);
...

هذا يجعل الشعور بديهيا بالنسبة لي، لكنني أتساءل عما إذا كان هذا هو حقا كيف يعمل برنامج Mapper Gront Gonti وبرامج تشغيل الطابعة.

لا يوجد حل صحيح

نصائح أخرى

1) هناك 72 نقطة / بوصة. (اعتاد أن يكون 72.27 ولكن تم تغييره.) 2) الجمع بين logpixelsx و logpixelsy بالطريقة التي تفعلها على ما يرام، ولكن 3) لا ينظر mapper الخط إلى الهراء والتوجيه عند تعيين الخطوط. سيتم استخدام قيم LogPixels فقط كجزء من تحويل الإحداثيات.

http://msdn.microsoft.com/en-us/library/ms969909(Loband).aspx.

لست متأكدا من كيفية قيام "برامج تشغيل الطابعات" لأن العبارة يمكن أن تتضمن العديد من برامج التشغيل والطابعات المحتملة.

يمكن أن يتقنح مع بكسلات مربع، ثم تمتد إلى غير مربع. يمكنهم تحويل منحنيات الرسولي. يمكنهم فعل شيء آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top