GDI+ の一般的なバグ [修正済み]

GDI+ の一般的なバグ [修正済み]

ビットマップ オブジェクトを変更したり、画像を Web サーバーに保存またはアップロードしようとすると、エラー メッセージA general error has occurred in GDI+ が表示される場合があります。使用しているアプリケーションに関係なく、エラーが発生する可能性があります。この投稿では、影響を受けるユーザーが問題を解決するために適用できる最も適切なソリューションを提供します。

GDI+ とは何ですか?

Windows GDI+ は、2D グラフィックス、画像、およびテキストをレンダリングするためのアプリケーションとデバイス ドライバーの間の中間層として機能することにより、2D ベクター グラフィックス、画像、およびタイポグラフィを提供します。GDI+ は、新しい機能を追加し、既存の機能を最適化することにより、Windows Graphics Device Interface (GDI) (以前のバージョンの Windows に含まれていたグラフィック デバイス インターフェイス) を改善します。つまり、GDI+ は Windows グラフィック サブシステムであり、ビデオ ディスプレイとプリンターの両方にグラフィックとリッチ テキストを表示するためのアプリケーション プログラミング インターフェイス (API) で構成されています。

GDI+ の一般的なエラー

例外は詳細を提供しないため、GDI+ エラーによってスローされる一般的なエラーは非常に一般的です。ただし、この問題に直面している場合は、シナリオまたは完了したタスクに応じて、以下の提案が問題の解決に役立つはずです。

1]ターゲット環境を再起動してから、従ったアクションを繰り返します。これは、影響を受けるユーザーが導入から運用にアプリを展開または移動する場合に機能します。

2]このエラーは、変更されたビットマップを保存して上書きしようとするときに「ロック」を設定すると発生する可能性があります。これは、ハード ドライブに保存されているイメージから Bitmap オブジェクトを初期化すると、基になるイメージ ファイルにロックが作成されるためです。つまり、Bitmap オブジェクトまたは Image オブジェクトがファイルから作成されると、ファイルはオブジェクトの期間中ロックされたままになります。その結果、イメージを変更して、作成されたのと同じファイルに保存し直すことはできません。この場合、次のいずれかを実行して問題を解決します。

  • ファイルを上書きする代わりに、新しいファイルを元のファイルとは別の名前で保存します。
  • 既存のファイルを上書きする必要がある場合は、既存のビットマップから別のビットマップを作成し、古いビットマップを破棄します。これにより、イメージ ファイルのロックが解除されます。これで、新しいビットマップに必要な変更を加えて、新しいビットマップを元のイメージ ファイル名で保存できます。
  • 「中間」メモリ ストリームに保存します。Memory /FileStreamvsコードはbitmap.Save(...)直感に反しますが、特定のメソッドの呼び出しを考慮して、わずかなバリエーションで動作するはずです。

ファイルの基礎となるロックは、Bitmap オブジェクトが削除されたときにのみ解放されることに注意してください。ロックが解放されると、それを上書きできます。

3]イメージを削除する必要があります。ガベージ コレクタを使用して時間内にイメージを見つけ、アンマネージ GDI リソースを解放すると、おそらく例外が発生するからです。また、コードを記述する際には、次の点に注意してください。

  • ConvertTo無駄に見えますが、必要に応じて使用してください。
  • パスを連結する必要がある場合は、 を使用しますPath.Combine
  • 文字列を一緒に追加する代わりに、文字列補間を使用します。
  • バックスラッシュなどの文字をエスケープする必要がある場合は、Verbatim String Literal @”…” を使用します。
  • usingコードが例外をスローした場合でも、オブジェクトの破棄を決して忘れないオペレーターを常に優先してください。

4]ファイルを保存するときにフォルダーに書き込む権限がありません。特に、Web サイトが制限された権限で実行されているために Web サイトでエラーが発生した場合。Web アプリケーションでは、Web サイトを実行するアプリケーション プールまたはアカウントは、ファイルを保存するフォルダーへの書き込みアクセス権を持っている必要があるため、ファイルを保存しようとしているフォルダーが書き込み可能であることを確認してください。たとえば、アカウントで Web サイトを使用している場合は、フォルダーへの書き込み権限をユーザーにDefaultAppPool付与する必要があります。IIS AppPool\DefaultAppPool

5] Azure を使用していて、ローカル テスト マシンではなくリモート Web サーバーでのみビットマップを開くと、GDI+ で一般的なエラーが発生する場合は、Azure IIS サーバーに GDI+ が存在する可能性があります。GIMP によって作成された新しい BMP 形式を処理できません。その場合は、次のいずれかを実行して問題を解決してください。

  • ペイントで BMP を再保存します。
  • 代わりに非圧縮 PNG を使用してください。
  • GIMP で 24 ビット BMP として保存します。この方法では品質が低下します。

6]このエラー メッセージは、移動先のパスがBitmap.Save()無効な場合 (フォルダが存在しないなど) に表示されます。簡単に言えば、画像を保存するための間違ったパスを書いています。この場合、必ず保存パスを修正し、パスにファイル名も含まれていることを確認してください。

7]ビットマップ ファイルがシステム ドライブに既に存在し、アプリケーションでエラーが発生した場合は、次の手順に従います。

  • 宛先フォルダーが存在することを確認してください。
  • 宛先フォルダーにその名前のファイルがまだないことを確認してください。
  • ローカル ドライブ上のイメージが保存されているフォルダーのアクセス許可を確認してください。これを行うには、フォルダーを右クリックし、[プロパティ] > [セキュリティ] > [編集] > [追加]を選択します。[Everyone] を選択し、[フル コントロールを許可]ボックスをオンにします。

C#でGDI+の一般エラーを解決するには?

C# の GDI+ で一般的なエラーが発生した場合は、保存しようとしているビットマップ ファイルがシステム ドライブに既に存在している可能性があります。この場合、ターゲット フォルダーが存在し、同じ名前のファイルがまだ存在しないことを確認できます。

GDI+ エラーとは何ですか?

ファイルを保存できない場合、GDI+ はエラーをスローします。これは通常、最も一般的な 2 つの理由によるものです。理由の 1 つは、ハード ドライブに保存されているイメージから Bitmap オブジェクトを初期化すると、基になるイメージ ファイルにロックが作成されるためです。ロックが原因で、変更したビットマップを保存して上書きしようとすると、このエラーがスローされます。

GDIウィンドウを修正するには?

デバイスの GDI+ Windows エラーを修正するには、次の提案が機能するかどうかを確認してください。

  • 昇格したコマンド プロンプトで SFC スキャンを実行します。
  • 電源のトラブルシューティング ツールを実行します。
  • ビデオ カード ドライバを更新します。
  • Windows Update を確認します。
  • コンピューターをクリーン ブート モードで起動します。

ラップトップの GDI とは何ですか?

GDI を使用すると、アプリケーション開発者は、特定のディスプレイ デバイスの詳細を気にすることなく、画面やプリンターに情報を表示できます。アプリケーション開発者は、GDI+ クラスによって提供されるメソッドを呼び出します。これらのメソッドは、特定のデバイス ドライバーに対して適切な呼び出しを行います。GDI+ はアプリケーションをグラフィックス ハードウェアから分離します。この分離により、開発者はデバイスに依存しないアプリケーションを作成できます。

Windows はまだ GDI を使用していますか?

Windows XP の登場により、GDI は廃止され、その後継である C++ ベースの GDI+ サブシステムが採用されました。GDI+ は Windows XP 以降に含まれていますが、GDI+ DLL をアプリケーションに同梱して、以前のバージョンの Windows で使用することもできます。

出典: Windows クラブ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です