Làm thế nào để sử dụng phông chữ tài nguyên trực tiếp mà không lưu phông chữ trong hệ thống tệp cục bộ cho ứng dụng độc lập [ứng dụng dành cho máy tính để bàn] trong VB.net/C#?Sử dụng phông chữ tài nguyên trực tiếp trong VB.net/C#
Trả lời
Có thể, bạn sẽ cần sử dụng phương thức PrivateFontCollection.AddMemoryFont(). Ví dụ, tôi đã thêm một tập tin phông chữ có tên là "test.ttf" như một nguồn tài nguyên và sử dụng nó như thế này:
using System.Drawing.Text;
using System.Runtime.InteropServices;
...
public partial class Form1 : Form {
private static PrivateFontCollection myFonts;
private static IntPtr fontBuffer;
public Form1() {
InitializeComponent();
if (myFonts == null) {
myFonts = new PrivateFontCollection();
byte[] font = Properties.Resources.test;
fontBuffer = Marshal.AllocCoTaskMem(font.Length);
Marshal.Copy(font, 0, fontBuffer, font.Length);
myFonts.AddMemoryFont(fontBuffer, font.Length);
}
}
protected override void OnPaint(PaintEventArgs e) {
FontFamily fam = myFonts.Families[0];
using (Font fnt = new Font(fam, 16)) {
TextRenderer.DrawText(e.Graphics, "Private font", fnt, Point.Empty, Color.Black);
//e.Graphics.DrawString("Private font", fnt, Brushes.Black, 0, 0);
}
}
}
Do lưu ý rằng biến fontBuffer
là tĩnh cố ý. Quản lý bộ nhớ rất khó khi bạn sử dụng AddMemoryFont(), bộ nhớ cần duy trì hợp lệ miễn là phông chữ có thể được sử dụng và PrivateFontCollection chưa được xử lý. Hãy chắc chắn không gọi Marshal.FreeCoTaskMem() nếu bạn không có bảo đảm đó, đó là một lỗi phổ biến gây ra rất khó chẩn đoán tham nhũng văn bản là rất. Bạn chỉ nhận được AccessViolationException khi bạn may mắn. Giữ nó hợp lệ cho cuộc đời của chương trình là giải pháp đơn giản.
Tuyệt vời. Cảm ơn vì đăng. – Harsha
@ HansPassant: nếu tệp phông chữ tôi muốn thêm có phần mở rộng '.bin' thay vì '.ttf' –
tôi cần sử dụng PInvoke trước khi mọi thứ hoạt động. Hàm ['AddFontMemResourceEx'] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd183325 (v = vs.85) .aspx) phải được sử dụng ... có lẽ vì' PrivateFontCollection .AddMemoryFont() 'mong đợi phông chữ nằm trong bộ nhớ hệ thống. Tôi cũng tự hỏi liệu điều này có liên quan gì đến thực tế là tôi đã thay đổi phông chữ của một hộp văn bản, chứ không phải là hiển thị rõ ràng với phông chữ. (Tuy nhiên, sử dụng 'PrivateFontCollection.AddFontFile()' vẫn hoạt động mà không có hàm PInvoke). –
Bạn đang nói về phông chữ Bao bì với ứng dụng. Nếu có. xem thử điều này: http://msdn.microsoft.com/en-us/library/ms753303.aspx
- 1. Loại phông chữ MIME trên lỗi máy chủ trực tiếp
- 2. Sử dụng phông chữ tài nguyên OS 9 trong CSS với @ font-face
- 3. Tiếp cận OTF phông chữ
- 4. Sử dụng phông chữ pixel trong PIL
- 5. Có thể sử dụng phông chữ tùy chỉnh - sử dụng phông chữ không?
- 6. Scala sánh chữ trên regex trực tiếp
- 7. Sử dụng phông chữ Windows (TTF)?
- 8. Có thể thực hiện thay thế chuỗi trong tệp XML tài nguyên Android trực tiếp không?
- 9. Sử dụng phông chữ tùy chỉnh trong Windows Phone 8
- 10. cách sử dụng màu phông chữ html
- 11. Sử dụng phông chữ bitmap GLUT
- 12. Twitter Bootstrap - Sử dụng phông chữ serif
- 13. Điều chỉnh kích thước phông chữ tùy thuộc vào phông chữ nào được sử dụng từ ngăn xếp phông chữ
- 14. Thêm phông chữ để sử dụng trong ReportLab
- 15. Nhận phông chữ phông chữ @ đẹp
- 16. Sử dụng tài nguyên trong Exceptions
- 17. Sử dụng tài nguyên trong windows
- 18. Đặt Màu phông chữ, Cỡ phông chữ và Phông chữ trong PHPExcel
- 19. Phát trực tiếp video trực tiếp giữa Máy chủ và ứng dụng khách - Sử dụng Java
- 20. @ phông chữ cho phông chữ tùy chỉnh, phông chữ không trơn tru trong Chrome
- 21. Sử dụng phông chữ tùy chỉnh (ttf) trong CSS
- 22. Phông chữ nào được sử dụng trong MS-DOS?
- 23. Sử dụng phông chữ tùy chỉnh trong iPhone App
- 24. Xóa sử dụng phông chữ loại trong C#/VB.NET
- 25. Sử dụng phông chữ tùy chỉnh trong Cocos2d
- 26. sử dụng phông chữ mặt trong thiên thạch?
- 27. Hiển thị phông chữ phông chữ @ trong Capybara-Webkit
- 28. Sử dụng .otf phông chữ trên các trình duyệt web
- 29. Nén/Deflate @ phông chữ phông chữ
- 30. Tài nguyên ngôn ngữ trực tuyến
@SamSol: không có điều gì như CS.NET. Bạn đã từng nghe về điều đó ở đâu? Ngôn ngữ chỉ là "C#". –