2017-02-23 7 views
0

MSDN ExtractMetaDatamsdnの例ExtractMetaData

速度を回復しようとしています。これはあまりにも単純な質問であればごめんなさい。

MSDNからPictureViewerの例を作成しましたが、追加機能を追加しようとしています。具体的には、イメージファイルから特定のMetaDataを読み込んで表示しようとしています。

例を理解しようとすると、サンプルコードを呼び出すためにフォームコントロールをリンクする必要があるようです。しかし、私はその呼び出しがどのように見えるべきかを理解していません。配置

ExtractMetadata(e); in an event handler giving me a error 

Argurment 1: に 'System.EventArgs' から変換することはできません 'System.Windows.Forms.PaintEventArgs'

私は 'this' ポインタまたは何かが足りないのですか?

/////////////////
私はもっと情報が必要だと思う。コメントの先頭にあるLINKを見ると、ExtractMetadataはイメージファイルからGET EXIFデータ(Exchangable Image File)への呼び出しですが、ペイントイベントハンドラのパラメータであるPaintEventArgs eが必要です。 Drawing.Imaging名前空間。ここで

例が提供するコードであると私は実行しようとしています:

private void ExtractMetaData(PaintEventArgs e) 
    { 
     try 
     { 
      // Create an Image object. 
      Image theImage = new Bitmap("C:\\Users\\DadPC\\Desktop\\testrunfiles\\fakePhoto.jpg"); 

      // Get the PropertyItems property from image. 
      PropertyItem[] propItems = theImage.PropertyItems; 

      // Set up the display. 
      Font font1 = new Font("Arial", 10); 
      SolidBrush blackBrush = new SolidBrush(Color.Black); 
      int X = 0; 
      int Y = 0; 

      // For each PropertyItem in the array, display the id, 
      // type, and length. 
      int count = 0; 
      foreach (PropertyItem propItem in propItems) 
      { 
       e.Graphics.DrawString("Property Item " + 
        count.ToString(), font1, blackBrush, X, Y); 
       Y += font1.Height; 

       e.Graphics.DrawString(" ID: 0x" + 
        propItem.Id.ToString("x"), font1, blackBrush, X, Y); 
       Y += font1.Height; 

       e.Graphics.DrawString(" type: " + 
        propItem.Type.ToString(), font1, blackBrush, X, Y); 
       Y += font1.Height; 

       e.Graphics.DrawString(" length: " + 
        propItem.Len.ToString() + 
        " bytes", font1, blackBrush, X, Y); 
       Y += font1.Height; 
       count += 1; 
      } 
      font1.Dispose(); 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("There was an error." + 
       "Make sure the path to the image file is valid."); 
     } 
    } 

そして、私のフォームアプリで私は

private void metadataButton_Click(object sender, EventArgs e) 
    { 
     ExtractMetaData(e); 
    } 

関数を呼び出す方法を把握しようとしていますしかし、それは私が何もしないことを含めて渡すことを期待していることを理解するのに失敗したところです。ExtractMetaData();

長期間私はイメージファイルに正しいメタデータを読み込みたいが、私はこの例をMSDNで使い始めていた。

Link to Metadata reference table

+0

(InitializeComponentの呼び出し後)コンストラクタで手動でのコード行を追加することができ、あなたが呼び出し元のハンドラを示すことができました'ExtractMetadata'? –

答えて

0

このコードは、Paintイベントハンドラから呼び出されることを意図しています。そのときに使用可能なGraphicsオブジェクトを使用して、ディスプレイに直接描画します。このようなもの:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    ExtractMetadata(e); 
} 

通常、イベントハンドラはVisual Studio Designerに追加されます。しかし、それはDesigner.csファイルに次の行を追加します。

private void InitializeComponent() 
{ 
    ... 
    this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); 
    ... 
} 

をあなたはまた

関連する問題