質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

リソース

効果的な演算のために必要となる、メモリ・ディスク容量・CPUの性能や環境のこと。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

0回答

131閲覧

C# Windowsフォーム リソースへのフォント追加方法 またはwinフォームアプリへのフォント埋め込み方法

mysknj

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

リソース

効果的な演算のために必要となる、メモリ・ディスク容量・CPUの性能や環境のこと。

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

0クリップ

投稿2024/11/21 03:04

編集2024/11/21 07:03

実現したいこと

趣味でC#を勉強中の者です。
作成したソフトにフォントを埋め込みたく、以下サイトを参考にして
以前はフォントの埋め込みに成功していました。

■参考にしたサイト
https://dobon.net/vb/dotnet/graphics/privatefontcollection.html
■リソースの埋め込み方
https://dobon.net/vb/dotnet/programing/vsresource.html
上記を参照して、「リソースエクスプローラー」→「新しいリソースの追加」→タイプに「ファイル」を選択→フォントファイルを選択で追加しています。

しかし以前の作成から2年ほどたってから同じ方法で新しく作成したソフトにフォントを埋め込もうとしたところ、以下のエラーが発生しています。

CS0029 暗黙的に型 'string' を 'byte[]' に変換できません
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs0029?f1url=%3FappId%3Droslyn%26k%3Dk(CS0029)

リソースの追加方法の仕方が間違っているのかと思い調べましたが、どう追加してもリソースの型?がstringになってしまいます。フォントをresourceに追加した際にbyte[]で持つようにする方法を教えてください。

発生している問題・分からないこと

フォントファイルをresourceに追加する際に「string」ではなく「byte[]」で持つ方法が分からない

該当のソースコード

System.Drawing.Text.PrivateFontCollection pfc; pfc = new System.Drawing.Text.PrivateFontCollection(); byte[] fontBuf = Properties.Resources.フォント名; IntPtr fontBufPtr = System.Runtime.InteropServices. Marshal.AllocCoTaskMem(fontBuf.Length); System.Runtime.InteropServices. Marshal.Copy(fontBuf, 0, fontBufPtr, fontBuf.Length); //AddFontMemResourceExを呼び出す uint cFonts; AddFontMemResourceEx(fontBuf, fontBuf.Length, IntPtr.Zero, out cFonts); pfc.AddMemoryFont(fontBufPtr, fontBuf.Length); System.Runtime.InteropServices. Marshal.FreeCoTaskMem(fontBufPtr); //バイト配列のポインターを取得する //アンセーフコードが許可されている必要がある unsafe { fixed (byte* pFontBuf = fontBuf) { //PrivateFontCollectionにフォントを追加する pfc.AddMemoryFont((IntPtr)pFontBuf, fontBuf.Length); } } foreach (Label label in this.Controls.OfType<Label>()) {   フォント変更の処理 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

リソースを埋め込む際の「タイプ」の選択を一通り試しました。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2024/11/21 09:46

> リソースの追加方法の仕方が間違っているのかと思い調べましたが、どう追加してもリソースの型?がstringになってしまいます。フォントをresourceに追加した際にbyte[]で持つようにする方法を教えてください。 Visual Studio 2022をお使いであれば、アップデートすると直るかもしれません。 私は少しだけバージョンが古いVisual Studo 2022を使っていましたが、ご質問を読んで「そんなことがあるのか?」と不思議に思い試してみました。するとこの問題が再現しました。確かにいったんファイルで追加したリソースがStringに直されてしまいました。(明らかにおかしい) Visual Studio 2022に関しては最近にUpdateがあり、Visual Studio Installerでアップデートすると最新が「17.12.1」になります。リソースエクスプローラー周りのバグのFIXもあったようです。 [Visual Studio 2022 リリース ノート] https://learn.microsoft.com/ja-jp/visualstudio/releases/2022/release-notes [リソース エクスプローラーで resx ファイルを開くことができない] このUpdateをした後、再度同じ操作をしてみたら、ファイルで追加したリソースは(タイプ:Byte[])になりました。試してみてください。
mysknj

2024/11/21 12:13

dodox86さん KOZ6.0さん dodox86さん、わざわざお試しいただきありがとうございます!アップデートしてみたところ、「リソースエクスプローラーの読み込み中にエラーが発生しました。」とのことで、リソースエクスプローラーすら表示できなくなってしまいました…(実行はできます) ただ、KOZ6.0さんにご教授いただいた方法で旧resourceエディタを開き無事フォントを「byte[]」で持つことができました!お二人の回答どちらが抜けてても解決しませんでした、ありがとうございます。 しかしフォントを埋め込んで表示すると、フォントの画質がかなり荒くなって利用できそうにないですね…フォントによってまちまちなようですが、今回使用したいフォントはかなり荒くなるようでした。 お二人とものおかげで解決はしたのですが、今回はいろいろお試しいただいたdodox86さんをベストアンサーに選ばせていただきます!回答欄に再度回答お願いいたします!
dodox86

2024/11/21 16:32

> アップデートしてみたところ、「リソースエクスプローラーの読み込み中にエラーが発生しました。」とのことで、リソースエクスプローラーすら表示できなくなってしまいました…(実行はできます) それはまた悲しいことになってしまいましたね、、、お使いの環境に依存したことかもしれませんし、製品機能自体がまだ不安定なのでしょうね。 > 今回はいろいろお試しいただいたdodox86さんをベストアンサーに選ばせていただきます!回答欄に再度回答お願いいたします! KOZ6.0さんご提示の回避策で作業を進められてよかったです。ベストアンサーには及びませんので、ご自身で対応をまとめて投稿し、自己解決として質問を閉じてもらえればと思います。よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問