Loading [MathJax]/extensions/tex2jax.js

2015-08-18

Dynamic Data DisplayのY軸を固定する

WPFでグラフ表示をするには、D3(Dynamic Data Display)を利用するのが定番ですが(おちラボでは)、DynamicゆえにY軸がダイナミックに動いてしまうのが利点であり、欠点、、、で、Y軸を固定する方法が以前はよくわからなかったのですが、最近なぜかすんなり見つかりましたので、、、gistにアップしたのを下記に上げておきます。

// Reference
// http://dynamicdatadisplay.codeplex.com/discussions/281164
public void setYAxisRange(int min,int max) {
//Y軸の固定処理
ViewportAxesRangeRestriction restr = new ViewportAxesRangeRestriction();
restr.YRange = new DisplayRange(min, max);
cp.Viewport.Restrictions.Add(restr); //ここのcpはChartPlotterクラス
}
public class DisplayRange {
public double Start { get; set; }
public double End { get; set; }
public DisplayRange(double start, double end) {
Start = start;
End = end;
}
}
public class ViewportAxesRangeRestriction : IViewportRestriction {
public DisplayRange XRange = null;
public DisplayRange YRange = null;
public Rect Apply(Rect oldVisible, Rect newVisible, Viewport2D viewport) {
if (XRange != null) {
newVisible.X = XRange.Start;
newVisible.Width = XRange.End - XRange.Start;
}
if (YRange != null) {
newVisible.Y = YRange.Start;
newVisible.Height = YRange.End - YRange.Start;
}
return newVisible;
 }
public event EventHandler Changed;
}


2015-08-17

C#でマルチページ形式のTiff画像を表示する方法(Form編)

C#でマルチページ形式のTiff画像を表示する方法です。Formアプリケーションの場合です。
private void showMultiTiff(string tiffFileName){
FileStream tifFS = new FileStream( tiffFileName , FileMode.Open , FileAccess.Read ) ;
Image gim = Image.FromStream( tifFS ) ;
FrameDimension gfd = new FrameDimension(gim.FrameDimensionsList[0]);
int pageCount = gim.GetFrameCount( gfd ) ;//全体のページ数を得る
System.Diagnostics.Debug.WriteLine(pageCount);
Graphics g = pictureBox1.CreateGraphics();
for(int i=0;i<pageCount;i++){
gim.SelectActiveFrame(gfd, i);
g.DrawImage(gim, 0,0, pictureBox1.Width, pictureBox1.Height);//PictureBoxに表示してます
System.Threading.Thread.Sleep(500);
}
}


WPFで画像表示が荒いと感じた場合の設定

WPFを本格的に使いだして2年目ですが、まだまだよくわからないところがありますね。tiffファイルの表示をWPFでやろうと思ったら、やけに荒い。。。WPFってUI周りが綺麗になるんじゃないの?Formの時より汚くなってるジャーンって、いろいろ調べて解決策がわかりました。XAMLのウィンドウタグに
  • RenderOptions.BitmapScalingMode="HighQuality"
のパラメータを設定すれば、OKです。どれだけ違いがあるのかは、下記のとおりです。

【デフォルト設定】


【HighQuality設定】


おわかりいただけだだろうか?


C#にてExcelの検索機能(Find関数)を利用する

C#からExcelのシートを検索するときには、下記のようにFind関数とFindNext関数を組み合わせればOKです。注意点としては、検索の開始位置は初期値の次の位置です。例えば、下記のコードを利用した場合、指定した列の2行目から検索が始まります。

Range targetRange = null;
Range firstFind = null;
Range currentFind=null;
targetRange = sheet.Columns[colName]; //シート内での検索範囲
currentFind = targetRange.Find(keyword, //検索キー
Type.Missing, XlFindLookIn.xlValues, XlLookAt.xlPart,
XlSearchOrder.xlByRows, XlSearchDirection.xlNext, false,
Type.Missing, Type.Missing);
while (currentFind != null){
if (firstFind == null){
firstFind = currentFind;
}
else if (currentFind.get_Address(XlReferenceStyle.xlA1)== firstFind.get_Address(XlReferenceStyle.xlA1)){
break;
}
currentFind = targetRange.FindNext(currentFind);
}
view raw ExcelFind.cs hosted with ❤ by GitHub