C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: クラスの使い方に関して


(過去ログ 137 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■80830 / inTopicNo.1)  クラスの使い方に関して
  
□投稿者/ あ (13回)-(2016/08/13(Sat) 12:09:53)

分類:[.NET 全般] 

VB.NETを使って以下のコードで画像のエンコード形式を変換することができます。

Dim bmp As New Bitmap("D:\text.tif")

bmp.Save(bmpFilename_out, System.Drawing.Imaging.ImageFormat.Png)

bmp.Dispose()


このコードだとPngで出力する設定になっていますが、
この部分を変数化したいと考えています。


Dim ext as string = "Png"

Dim bmp As New Bitmap("D:\text.tif")

bmp.Save(bmpFilename_out, System.Drawing.Imaging.ImageFormat. & ext)

bmp.Dispose()


のようにしてもエラーが出てしまうのですが
どうすれば、ImageFormatの後ろのPngの部分を引数として受け取ることができますか?

Caseやif文で画像フォーマット毎に書いていくしかないのでしょうか?




引用返信 編集キー/
■80831 / inTopicNo.2)  Re[1]: クラスの使い方に関して
□投稿者/ WebSurfer (999回)-(2016/08/13(Sat) 12:52:40)
No80830 (あ さん) に返信

> bmp.Save(bmpFilename_out, System.Drawing.Imaging.ImageFormat. & ext)

上記のコードの第 2 引数の System.Drawing.Imaging.ImageFormat. & ext というのは、
そもそも文法的に間違いで、そこは ImageFormat クラスでなければなりません。

Visual Basic (宣言) 
-------------------
Public Sub Save ( _
    filename As String, _
    format As ImageFormat _
)

なので、ImageFormat クラスの静的プロパティ(Png, Bmp, Jpeg など)を使って希望す
るイメージ形式の ImageFormat オブジェクトを渡すということになります。

> このコードだとPngで出力する設定になっていますが、
> この部分を変数化したいと考えています。

ということであれば、例えば以下の使用法の format で「変数化」するということになり
ます。(例:Dim format As ImageFormat = ImageFormat.Png)

Visual Basic (使用法) 
---------------------
Dim instance As Image
Dim filename As String
Dim format As ImageFormat

instance.Save(filename, format)

引用返信 編集キー/
■80833 / inTopicNo.3)  Re[2]: クラスの使い方に関して
□投稿者/ あ (14回)-(2016/08/13(Sat) 14:51:09)
ありがとうございます。
Case文で切り替える必要があるのですね。
 
解決済み
引用返信 編集キー/
■80836 / inTopicNo.4)  Re[3]: クラスの使い方に関して
□投稿者/ WebSurfer (1001回)-(2016/08/13(Sat) 15:24:08)
No80833 (あ さん) に返信

> Case文で切り替える必要があるのですね。

そこのところですが、もし仮に、

> bmp.Save(bmpFilename_out, System.Drawing.Imaging.ImageFormat. & ext)

ということが成り立つとしても、例えば jpeg 形式にしたい場合は、

> Dim ext as string = "Png"

となっている初期値を、

ext = "Jpeg"

というように、Case 文でも if 文でも何でもいいですが何か適切な手段で「切り替
える必要がある」わけですよね?

それと同様に、上のレスの(使用法)で書いた format を切り替えればよいと思って
いたのですが、当方は何か思い違いをしているのでしょうか?

引用返信 編集キー/
■80838 / inTopicNo.5)  Re[4]: クラスの使い方に関して
□投稿者/ あ (17回)-(2016/08/13(Sat) 15:32:00)
説明がわかりにくく申し訳ありません。

例えば、Path.GetExtension メソッドを使って
ファイルパスから拡張子を取得し
それを
Dim format As ImageFormat
に変換したい場合です。
これを直接代入したいと考えました。

また、今回のケースですと画像の拡張子は5つくらいしかないので
簡単なFucntionを作れば済むのですが

一般的なクラスの使い方として
クラスの引数(ドット(.)の後のことをなんと呼ぶのでしょうか?)の部分を変数で呼び出す方法があれば
便利だと考え質問しました。
 
引用返信 編集キー/
■80839 / inTopicNo.6)  Re[5]: クラスの使い方に関して
□投稿者/ WebSurfer (1002回)-(2016/08/13(Sat) 16:21:12)
No80838 (あ さん) に返信

> 例えば、Path.GetExtension メソッドを使って
> ファイルパスから拡張子を取得し
> それを
> Dim format As ImageFormat
> に変換したい場合です。

何か方法があるかもしれませんが(かもしれないと思うだけで深く考えてません)、それを
考えるより、全部あわせても 10 しかプロパティはないし、多分質問者さんが使うのはそれ
より少ないでしょうから、Case 文で切り替えるのが開発工数、分かりやすさ、保守工数を
考えてベストだと思います。

・・・が、一般的な話としてそのような方法が知りたいと言うことであれば、ここで質問を
続けてはいかがですか?

引用返信 編集キー/
■80840 / inTopicNo.7)  Re[5]: クラスの使い方に関して
□投稿者/ Azulean (683回)-(2016/08/13(Sat) 16:30:18)
No80838 (あ さん) に返信
> また、今回のケースですと画像の拡張子は5つくらいしかないので
> 簡単なFucntionを作れば済むのですが

組み合わせが多くても自分で作った方関数を用いた方が良いケースは多いと思います。
ある入力に対する出力のペアというのは、それを求める人が決めて作り込む部分であるため。

無理に共通化する、あるいは難しい方法を採ろうとすると柔軟性に欠けます。


> 一般的なクラスの使い方として
> クラスの引数(ドット(.)の後のことをなんと呼ぶのでしょうか?)の部分を変数で呼び出す方法があれば
> 便利だと考え質問しました。

クラスのメンバー(プロパティ、フィールドなど)を取り出す方法は、リフレクションと呼ばれて存在しています。
ただ、それを使うためには、リフレクションとは何か、型情報とは何かを理解しておかないといけないので、いきなり手を出すのは、ハードルが高いと思います。

また、拡張子の "jpg" と "jpeg" は同じ "ImageFormat.Jpeg" を得ないといけないので、その部分は自分で変換関数を作らないといけません。


// 利用者は便利と思うかもしれないが、作り手が利用者のすべてを想像しきるのは難しいし、よかれと思って用意したものが「不便」と言われることも多い。
// クラスライブラリの設計は難しいのです…。
引用返信 編集キー/
■80841 / inTopicNo.8)  Re[6]: クラスの使い方に関して
□投稿者/ あ (18回)-(2016/08/13(Sat) 18:45:22)
勉強になりました。
どうもありがとうございます。
 
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -