フォントサイズをポイントからピクセルに変更
Form_Paint或いはPanelコントロールの~_Paintメソッドの中に、PaintEventArgs型のパラメータeからディスプレイのDPIを取得できる。
横方向のDPI : e.Graphics.DpiX
縦方向のDPI : e.Graphics.DpiY
例えば、1920*1080のディスプレイを100%に設定した場合は96で、125%設定の場合は120となる。(DpiXとDpiXが同じの場合がほとんど)
① 縦方向のDPIを取得して保存しておく。
Utility.DpiY = e.Graphics.DpiY
② 幾何変換のための3×3擬似空間行列クラスのインスタンスを作る。
System.Drawing.Drawing2D.Matrix m = CurrentDicomImage.Matrix(CurrentDicomViewer);
③ フォントサイズをポイント単位からピクセル単位に変換する。
short FontSizeInPixel = (short)(FontSizeInPoint / 72.0 * Utility.DpiY / DicomGlobal.Zoom(m));
※1Pointは1/72Inchと相当する。
※上記はDicomImage空間の数値を得る。
DicomObjects_ビューア内画像位置座標値取得
ビューア内、画像表示レイアウトがm×n関係なく、以下方法で現在選択中画像の開始位置の座標値を取得できる。
m_SelectedImage.CellLocation(curViewer)
フォームを一時的に最前面に表示
フォームを一時的に最前面に表示する方法:
this.Show();
this.TopMost = true;
this.TopMost = false;
画像ファイル表示後移動できない現象の解消
string strFileFullPath = @"C:\ims\img8.jpg";
//pictureBox1.Image = System.Drawing.Image.FromFile(strFileFullPath);
//↑直接開くのではなく、↓FileStreamを利用することで「ロック」されなくなる
FileStream fs = new FileStream(strFileFullPath, FileMode.Open, FileAccess.Read);
pictureBox1.Image = Image.FromStream(fs);
fs.Close();
(C#)Listの中身を値渡しでコピーする方法
Listの中身を別のリストにコピーしたいとき、
単純にリストを代入すると参照渡しになってしまう。
コンストラクタを使ってListの中身を値渡しをすればいい。
var list1 = new List<string>();
list1.Add("a");
var list2 = new List<string>(list1);
list2.Add("b");
Console.WriteLine(string.Join(",", list1)); // a
Console.WriteLine(string.Join(",", list2)); // a,b
Webサービス公開時に「Web Deploy タスクに失敗しました。(このアクセス制御リストは標準の形式ではないため、変更できません。)」エラー発生
[手順]
・管理者権限でVisual Studio 2015起動してWebサービスのプロジェクト選択し、右クリックで「公開」を選択
・Webを発行する
発行方法:Web Deploy
サーバー:localhost
・「Web Deploy タスクに失敗しました。(このアクセス制御リストは標準の形式ではないため、変更できません。)」 と表示される
[解決方法]
・IISマネージャーから当該フォルダを右クリック
・アクセス許可の編集を選択
・セキュリティタブを選択
・警告ダイアログが表示されるのでOKを選択
・許可を追加して適用