投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/4/17 19:08:23
> 「FrameDimensionの宣言がありません」となります

VB2010 ですよね。

波線部右下の「エラー修正のオプション」を押すことで修正案が提示されますので、
提示された補正案の 1 つ目(インポート)または 2 つ目(Imaging.FrameDimension) の
いずれかの選択肢をクリックしてみてください。



このとき、3 つ目の提案(FrameDimension という名のクラスを自作)は押さないように。


> 名前空間の宣言方法というかが、わかっていないのが問題なのではないかと考えています

たとえば Graphics というクラスは、正確には
System.Drawing.Graphics という名前ですね。

System.Drawing までが Namespace(名前空間)の名称、
Graphics というのが Class(クラス)の名称です。ここまでは良いでしょうか?


しかし名前空間まで含めて記述すると
Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(canvas)
のように長くなってしまうため、名前空間を省略して
Dim g As Graphics = Graphics.FromImage(canvas)
のように書くのが一般的です。

名前空間を省略できるようにする方法は 2 つあります。
一つ目の方法は、ファイルの先頭に
 Imports System.Windows.Forms
のように宣言するというものです。これで、その名前空間を省略できるようになります。

二つ目の方法は、ファイル単位で指定するのではなく、プロジェクト単位で指定する方法です。
プロジェクトのプロパティの [参照]タブの[インポートされた名前空間]を使うこともできます。
(普段よく使われる名前空間は、既にこの方法でインポートされた状態になっています)




> Dim img As Image = Image.FromFile(filePath)

たとえば上記の場合、Image クラスが使われていますね。
Image クラスの解説はここです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.image?view=netframework-4.0

ページの上のほうを見ると、「名前空間: System.Drawing」と書かれています。
(ついでに、アセンブリとして参照設定に「System.Drawing.dll」が必要であることも分かります)

System.Drawing 名前空間は最初からインポート済みなので、
System.Drawing.Image という長い名前ではなく、
ただの Image という短い名前で表記することができるわけです。


> Dim fd As New FrameDimension(img.FrameDimensionsList(0))

FrameDimension クラスの解説はここです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.imaging.framedimension?view=netframework-4.0

こちらは、「名前空間: System.Drawing.Imaging」と書かれています。
しかしこの名前空間は、初期状態ではインポートされていません。

この場合は、先の手順で名前空間「System.Drawing.Imaging」をインポートしておくか
もしくはコード側をフルネーム表記で
 Dim fd As New System.Drawing.Imaging.FrameDimension(img.FrameDimensionsList(0))
のようにすれば良いという事になります。


そしてこの訂正を自動的に行ってくれるのが、先の「修正案」ということです。

もしも修正案が提示されなかったとしても、上記の手順を踏めばコンパイルできるようになりますよ。