- PR -

Bitmapクラスで画像を取得できない・・・

投稿者投稿内容
hirasane
常連さん
会議室デビュー日: 2003/10/31
投稿数: 28
投稿日時: 2003-11-20 11:17
いつもお世話になっています。hirasaneです。
Webアプリを開発しています(VB.NET+ASP.NET使用)。

Bitmapクラスを用いて、画像を取得する場合、
ローカルにある画像は取得できるのですが、
ネットワーク(LAN)上にある画像(jpeg)の取得ができません。

コード例
Dim bmpTemp as Bitmap = New Bitmap("ローカル画像パス")
→ OK
Dim bmpTemp as Bitmap = New Bitmap("ネットワーク上の画像パス")
→ NG

なお、
Image1.ImageURL = "ネットワーク上の画像パス" 
は、問題ありません。

初歩的な質問かもしれませんが、どうかお知恵をお貸しください。
(最近お世話になってばかり・・・)


[ メッセージ編集済み 編集者: hirasane 編集日時 2003-11-20 11:41 ]
nishi
常連さん
会議室デビュー日: 2003/11/14
投稿数: 25
お住まい・勤務地: 大阪
投稿日時: 2003-11-20 13:31

引用:

Dim bmpTemp as Bitmap = New Bitmap("ネットワーク上の画像パス")
→ NG

[ メッセージ編集済み 編集者: hirasane 編集日時 2003-11-20 11:41 ]



BitmapクラスのコンストラクタでNGということですが、例外発生ということですよね。
どのような例外が発生しているのでしょうか?
詳細が分かるとアドバイスもはかどります。

また、「ネットワーク上の画像パス」というのは
\\<マシン名>\<ディレクトリ名>\<ファイル名>
というやつですか?
それとも
http://〜〜
でしょうか?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2003-11-20 17:38
http://〜
というものであれば

System.Net.WebClient wc = new System.Net.WebClient();
System.IO.Stream st = wc.OpenRead(@"http://〜");
Bitmap bmp = new Bitmap(st);
st.Close();

で取得できると思います。

\\<マシン名>\<ディレクトリ名>\<ファイル名>
はアクセス権の問題で開けないと思います。エラーは
「ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。」
のようなものでしょうか。以下のスレッドが参考になるかもしれません。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6174&forum=7

引用:

なお、
Image1.ImageURL = "ネットワーク上の画像パス" 
は、問題ありません。


文字列をセットするだけですから例外は発生しません。
で、ブラウザから正常に画像を見れたとしても、それは
ブラウザを開いてるユーザーにアクセス権があるからだと
思います。(ローカルマシンでテストしている場合など)
hirasane
常連さん
会議室デビュー日: 2003/10/31
投稿数: 28
投稿日時: 2003-11-21 11:43
nishiwakiさん、べるさん、ありがとうございます。
べるさんのご助言を元にいろいろ試してみたのですが、
上手くいきません・・・
アクセス権の問題が発生していることは確かなようですが。

今記述しているコードは、
======================================================
Dim wc As System.Net.WebClient = New System.Net.WebClient
Dim st As System.IO.Stream = wc.OpenRead("http://host名 or IPアドレス/パス/ファイル名.jpg")

Dim bmpImage As Bitmap = New Bitmap(st)
Dim imgHeight As Integer = bmpImage.Height
Dim imgWidth As Integer = bmpImage.Width

ImageButton1.Height = New Unit(imgHeight * 0.1)
ImageButton1.Width = New Unit(imgWidth * 0.1)
ImageButton1.ImageUrl = "http://host名 or IPアドレス/パス/ファイル名.jpg"

st.Close()
======================================================
と、画像情報を取得→画像サイズをリサイズ→Imageオブジェクトのサイズを
指定、ということをやっていますが、
Dim st As System.IO.Stream = wc.OpenRead("http://host名 or IPアドレス/パス/ファイル名.jpg")
で例外エラーが発生してしまいます。
エラーメッセージは、
基になる接続が閉じられました : リモート サーバーに接続できません。
です。

どうか、よろしくお願い致します。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2003-11-21 13:10
#あ、C#で書いてしまいましたね・・

で、おそらくプロキシを通して接続しているんですよね?
だと、Web.Configファイルの以下の位置にこのように記述を追加する必要があります。

<configuration>
<system.net>
<defaultProxy>
<proxy usesystemdefault = "false" proxyaddress "http://XX.XX.XX.XX:ポート番号" bypassonlocal = "true" />
</defaultProxy>
</system.net>
  ・
  ・

Web.ConfigファイルはVS.NETを使っているのならaspxファイルと同じ位置に
自動的に生成されると思います。
hirasane
常連さん
会議室デビュー日: 2003/10/31
投稿数: 28
投稿日時: 2003-11-21 13:46
べるさん、ありがとうございます。

しかし、ファイルサーバは同じLAN内にあるので、プロキシが原因ではないようです。
(念のため試してみました)

machine.configのユーザ設定を書き直すことで、ファイルサーバへの
アクセス権限を与えることは可能のようですが、
全てのASP.NETアプリに影響を及ぼすようなので、これも
NGとなってしまいます・・・

引用:

べるさんの書き込み (2003-11-21 13:10) より:
#あ、C#で書いてしまいましたね・・

で、おそらくプロキシを通して接続しているんですよね?
だと、Web.Configファイルの以下の位置にこのように記述を追加する必要があります。

<configuration>
<system.net>
<defaultProxy>
<proxy usesystemdefault = "false" proxyaddress "http://XX.XX.XX.XX:ポート番号" bypassonlocal = "true" />
</defaultProxy>
</system.net>
  ・
  ・

Web.ConfigファイルはVS.NETを使っているのならaspxファイルと同じ位置に
自動的に生成されると思います。

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2003-11-21 15:06
#あ、はずしてましたね・・

私のところではhirasaneさんが書かれたコードでWEB上にある画像(ローカルでも
外部でも)を縮小して表示することに成功しています。
(本質ではないと思いますがVS.net2002です)

wc.OpenRead("http://host名 or IPアドレス/パス/ファイル名.jpg")
の部分の
http://host名 or IPアドレス/パス/ファイル名.jpg
をブラウザのアドレスバーに直接打ち込んだ場合は画像が見れているのですよね?

つまり「host名」で指定されてるサーバではIISかなにかで「パス」という名前の
仮想ディレクトリが設定されているのですよね。
コードの部分を
ImageButton1.ImageUrl = "http://host名 or IPアドレス/パス/ファイル名.jpg"
1行だけにしてみて、問題なく画像が表示されるならば何か別の問題なのかも・・

#ここでは関係なさそうですがIPアドレスを指定した場合はプロキシを通して
#アクセスするんだったと思います

#誰かがあっさり解決してくれそう・・・(汗)
hirasane
常連さん
会議室デビュー日: 2003/10/31
投稿数: 28
投稿日時: 2003-11-21 17:53
べるさん、大変申し訳ありません。
私の知識と注意の不足から、大きな見落としをしていました。

現状、画像は公開していませんので、“http://〜”は使えません。
これが理由でエラーになっていました・・・
やはり画像を公開するか、権限の設定を変更するか、サイズを修正しないか、
の選択になりそうです。

貴重な時間をいただいたのに、本当に済みませんでした。
もしも、他に良い方法がありましたら、またご助言お願い致します。

スキルアップ/キャリアアップ(JOB@IT)