中の技術日誌
 ホーム / 上へ

わんくまライブラリ Wankuma.Drawing.Imageクラス Version2

2005/01/25

この文書はVisual Studio 2003(.NET1.1)をベースに記述されています。それ以降のバージョンや、あなたが読んでいる時点では変更されている可能性があります。
またバージョンアップされている場合にはなんらかかの不具合を含んでいる可能性があります。

新バージョンへ
Wankuma.Drawing.Image3d.htm

ドキュメントへ
Wankuma.Drawing.Image2d.htm

利用規約へ
../kiyaku.htm

#region Using
using System;
using System.Collections;
using System.IO;
#endregion
namespace Wankuma.Drawing
{
 /// <SUMMARY>
 /// Image の概要の説明です。
 /// </SUMMARY>
 public sealed class Image
 {
  #region private Image()
  /// <SUMMARY>
  /// 隠蔽用コンストラクタ
  /// </SUMMARY>
  private Image()
  {
  }
  #endregion
  #region public static ArrayList FromFiles(string 画像ファイル名)
  /// <SUMMARY>
  /// 指定されたファイルを読み込みます。
  /// 画像として読み込めなかったものはスキップされます。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">読み込みを行う画像ファイル名</PARAM>
  /// <RETURNS>読み込んだ画像の入ったArrayList</RETURNS>
  public static ArrayList FromFiles(string 画像ファイル名)
  {
   return Image.FromFiles(new string[]{画像ファイル名});
  }
  #endregion
  #region public static ArrayList FromFiles(string[] 画像ファイル名)
  /// <SUMMARY>
  /// 指定されたファイルを読み込みます。
  /// 画像として読み込めなかったものはスキップされます。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">読み込みを行う画像ファイル名</PARAM>
  /// <RETURNS>読み込んだ画像の入ったArrayList</RETURNS>
  public static ArrayList FromFiles(string[] 画像ファイル名)
  {
   ArrayList al = new ArrayList();
   try
   {
    foreach( string file in 画像ファイル名)
    {
     try
     {
      al.AddRange(Image.FromFileMultiPages(file));
     }
     catch(OutOfMemoryException)
     {
     }
    }
    return al;
   }
   catch(Exception er)
   {
    foreach(System.Drawing.Image target in al)
    {
     if ( target != null )
     {
      target.Dispose();
     }
    }
    throw er;
   }
  }
  #endregion
  #region  public static ArrayList FromFileMultiPages(string 画像ファイル名)
  /// <SUMMARY>
  /// ファイルから画像を読み取ります。
  /// ファイルをロックしません。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">取得するファイル名</PARAM>
  /// <RETURNS>取得したイメージ</RETURNS>
  public static ArrayList FromFileMultiPages(string 画像ファイル名)
  {
   ArrayList al = new ArrayList();
   try
   {
    //画像ストリームの作成
    using (FileStream fs = new FileStream(画像ファイル名, FileMode.Open, FileAccess.Read))
    {
     try
     {
      //画像の読み取り
      System.Drawing.Image ReadImage = System.Drawing.Image.FromStream(fs);
      //ディメンジョンリストを作成する
      Guid[] DimensionList = ReadImage.FrameDimensionsList;
      //ディメンジョンが続く限りループ
      foreach(Guid dimens in DimensionList )
      {
       //フレームディメンジョンを作成し
       System.Drawing.Imaging.FrameDimension fd = new System.Drawing.Imaging.FrameDimension(dimens);
       //ページ数を取得する
       int Pages = ReadImage.GetFrameCount(fd);
       //全頁処理対象
       for( int frameIndex = 0; frameIndex &lt; Pages; frameIndex++ )
       {
        //アクティブフレームを切り替える
        ReadImage.SelectActiveFrame(fd, frameIndex);
        //新しいビットマップにコピーする
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ReadImage);
        //配列に追加する
        al.Add(bmp);
       }
      }
     }
     finally
     {
      fs.Close();
     }
    }
   }
   catch(Exception er)
   {
    foreach(System.Drawing.Image target in al)
    {
     if ( target != null )
     {
      target.Dispose();
     }
    }
    throw er;
   }
   return al;
  }
  #endregion
  #region public static System.Drawing.Image FromFile(string 画像ファイル名)
  /// <SUMMARY>
  /// ファイルから画像を読み取ります。
  /// ファイルをロックしません。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">取得するファイル名</PARAM>
  /// <RETURNS>取得したイメージ</RETURNS>
  public static System.Drawing.Image FromFile(string 画像ファイル名)
  {
   //画像の読み込み
   using (FileStream fs = new FileStream(画像ファイル名, FileMode.Open, FileAccess.Read))
   {
    try
    {
     return System.Drawing.Image.FromStream(fs);
    }
    finally
    {
     fs.Close();
    }
   }
  }
  #endregion
  #region public static System.Drawing.Image FromFileThumbnailWidth(string 画像ファイル名, int Width)
  /// <SUMMARY>
  /// ファイルから画像サムネイルを読み取ります。
  /// サイズは幅を指定すればその幅で変換します。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">取得するファイル名</PARAM>
  /// <PARAM name="Width">幅</PARAM>
  /// <RETURNS>取得したイメージ</RETURNS>
  public static System.Drawing.Image FromFileThumbnailWidth(string 画像ファイル名, int Width)
  {
   return FromFileThumbnail(画像ファイル名, Width, 0 );
  }
  #endregion
  #region public static System.Drawing.Image FromFileThumbnailHeight(string 画像ファイル名, int Height)
  /// <SUMMARY>
  /// ファイルから画像サムネイルを読み取ります。
  /// サイズはを指定すればその高さで変換します。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">取得するファイル名</PARAM>
  /// <PARAM name="Height">高さ</PARAM>
  /// <RETURNS>取得したイメージ</RETURNS>
  public static System.Drawing.Image FromFileThumbnailHeight(string 画像ファイル名, int Height)
  {
   return FromFileThumbnail(画像ファイル名, 0, Height );
  }
  #endregion
  #region public static System.Drawing.Image FromFileThumbnail(string 画像ファイル名, int Width, int Height)
  /// <SUMMARY>
  /// ファイルから画像サムネイルを読み取ります。
  /// サイズは幅を指定すればその幅で変換します。
  /// </SUMMARY>
  /// <PARAM name="画像ファイル名">取得するファイル名</PARAM>
  /// <PARAM name="Width">幅</PARAM>
  /// <PARAM name="Height">高さ</PARAM>
  /// <RETURNS>取得したイメージ</RETURNS>
  public static System.Drawing.Image FromFileThumbnail(string 画像ファイル名, int Width, int Height)
  {
   System.Drawing.Bitmap bmp;
   using ( System.Drawing.Image 元画像 = FromFile(画像ファイル名) )
   {
    //元画像からの縮尺を取得する
    float WidthPer = 0;
    float HeightPer = 0;
    if ( Width != 0 )
    {
     WidthPer = (float)Width / (float)元画像.Width;
    }
    if ( Height != 0 )
    {
     HeightPer = (float)Height / (float)元画像.Height;
    }
    //縮尺を採用する。
    //片方しか指定がないときには小さい方を採用
    float Percent;
    if ( Width == 0 )
    {
     Percent = HeightPer;
    }
    else if ( Height == 0 )
    {
     Percent = WidthPer;
    }
    else
    {
     Percent = WidthPer &gt; HeightPer ? HeightPer : WidthPer;
    }
    
    
    bmp = new System.Drawing.Bitmap((int)(元画像.Width * Percent), (int)(元画像.Height * Percent) );
    using ( System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp) )
    {
     //実際に描画する
     g.DrawImage( 元画像, 0, 0, 元画像.Width * Percent, 元画像.Height * Percent );
    }
   }
   return bmp;
  }
  #endregion
 }
}

勉強会: 05/18 大阪 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告