GDI+でジェネリックエラーが発生したのを解決する
2022-01-23 11:58:10
DNN Fckエディタに画像アップロード時のサイズ変更機能がなくて不便を感じているので、画像サイズを変更する機能を追加します。
DNNコアのUploadFile()のメソッドを変更したくないので、fckエディタのアップロードのページを変更するだけです。
変更後のワークフローは
1. 画像アップロードを選択し、DNN UploadFile()を呼び出して画像をアップロードする。
2. サーバーにアップロードされたファイルを読み込んで、一時的に保存する Image
3. GDI+ GetThumbnailImageを呼び出して、画像のサイズを変更し、元のファイルを上書きします。
店舗への3歩目で実行すると、必ずA generic error occurred in GDI+となる問題が発生します。
最終的に原因が判明したのは:
ソースビットへのアクセスを維持するために、GDI+はあらゆるソースファイルをロックし、アプリケーションにあらゆるソースストリームのライフを維持するよう強制します。
ビットマップ
または
画像
オブジェクトを作成します。
解決策は、インデックスまたは非インデックスの画像を作成することです。
Graphics.DrawImage()
を使用して、イメージを新しく作成されたビットマップオブジェクトにコピーし、新しいイメージのサイズを変更します。
サンプルコードです。
1
ビットマップ bm1
=
(Bitmap)Image.FromFile()。
"
doodaa.gif
"
<スパン
);
2 ビットマップ bm2 = <スパン 新しい ビットマップ(bm1.Width,bm1.Height)。
3 グラフィックス g <スパン = <スパン Graphics.FromImage(bm2)。
<スパン 4 g.DrawImageUnscaled(bm1, <スパン 0 , <スパン 0 );
5 // bm2 には、インデックスを持たないバージョンの画像が含まれるようになりました。
<スパン 6 // 今度はXを描きます。
7 g.DrawLine(blah - ブラー .) ;
<スパン 8 g.DrawLine(blah - ブラー .) ;
<スパン 9 // グラフィックを消す
<スパン 10 g.Dispose()を実行します。
<スパン 11 // を作成し、新しいgifを保存します。
<スパン 12 bm2.Save() " foobar.gif " , ImageFormat.Gif)。
<スパン 13
2 ビットマップ bm2 = <スパン 新しい ビットマップ(bm1.Width,bm1.Height)。
3 グラフィックス g <スパン = <スパン Graphics.FromImage(bm2)。
<スパン 4 g.DrawImageUnscaled(bm1, <スパン 0 , <スパン 0 );
5 // bm2 には、インデックスを持たないバージョンの画像が含まれるようになりました。
<スパン 6 // 今度はXを描きます。
7 g.DrawLine(blah - ブラー .) ;
<スパン 8 g.DrawLine(blah - ブラー .) ;
<スパン 9 // グラフィックを消す
<スパン 10 g.Dispose()を実行します。
<スパン 11 // を作成し、新しいgifを保存します。
<スパン 12 bm2.Save() " foobar.gif " , ImageFormat.Gif)。
<スパン 13
以下は、マイクロソフトのKBに記載されている問題点です。
http://support.microsoft.com/?id=814675
関連
-
AttributeError: 'dict' オブジェクトは 'append' という属性を解決していません。
-
pipの実行エラーです。ランチャーで致命的なエラーが発生しました。Unable to create process using '"'
-
Bluetooth接続のタイムアウト現象
-
エラー: 非静的メンバ関数の無効な使用
-
MySql エラー: java.sql.SQLException: ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセスが拒否されました。
-
ModuleNotFoundError: scipy'という名前のモジュールがない ソリューション
-
R言語ファイル読み込みエラー
-
ユニティ再生gif
-
Python で 'str' と 'int' のインスタンス間でエラー '>=' がサポートされていない
-
mscorlib.dll で "TargetInvocationException" 型の例外が発生するが、ユーザーコードで処理されない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C# 遅延プログラム遅延
-
Linux での C++ コンパイルエラー:コマンドラインオプション "-std=c++11" が認識されない。
-
場所 0x00000004 の読み取りでアクセス違反が発生しました。
-
collect2.exe [エラー] ld が 1 の終了ステータスを返しました。
-
問題 free(): 無効な次のサイズ (fast): 0x0000000001475e70 ***
-
ldap_bind: 無効な認証情報 (49)
-
Gulpのマルチタスクエラーです。AssertionError [ERR_ASSERTION]: タスク関数を指定する必要があります ソリューション
-
matlabでよく使われる論理演算
-
android spinner 初期設定 ItemSelectedListener 即時実行 解決方法
-
シェルを実行するためにexecを使用するant