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

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

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

Re[8]: asp.netで画像描画


(過去ログ 137 を表示中)

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

■80376 / inTopicNo.1)  asp.netで画像描画
  
□投稿者/ 国方賢治 (4回)-(2016/07/12(Tue) 16:23:39)

分類:[ASP.NET (VB)] 

コ ードはつぎのとうり

  Imports System.Drawing
  Public Class Pyramid
Inherits System.Web.UI.Page
Dim img As New Bitmap(500, 500)
Dim g As Graphics = Graphics.FromImage(img)
Const XMAX = 399, YMAX = 399
Const HABA = 60, MITUDO = 25, RITTAIDO = 2
Dim TAKASA(0 To XMAX), DOT(0 To XMAX) As String
Dim pathtofile = Server.MapPath("/pyramid3.png")
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load


OBJECTBYOGA()
For Y = 0 To YMAX
' Erase DOT
For i = 0 To XMAX
DOT(i) = ""
Next

TAKASALOAD(Y)
For X = 0 To XMAX
Dim TAKASA1 As Integer = TAKASA(X) * RITTAIDO
If DOT(X) = "" Then
If Rnd() * 100 < MITUDO Then
DOT(X) = "7"
Else
DOT(X) = "0"
End If
End If
img.SetPixel(X, Y, System.Drawing.ColorTranslator.FromOle(QBColor(Val(DOT(X)))))
Dim TUGI As Integer = X + HABA - (TAKASA1 * RITTAIDO)
If TUGI >= 0 And TUGI <= XMAX Then

DOT(TUGI) = DOT(X)
End If
Next
Next




Response.ContentType = "image/png"
Response.Flush()
' img.Save(Response.OutputStream, Imaging.ImageFormat.Png)
' img.Save(Server.MapPath("/pyramid3.png"), Imaging.ImageFormat.Png)
img.Save(pathtofile, Imaging.ImageFormat.Png)
' Response.WriteFile("/pyramid3.png")
Response.WriteFile(pathtofile)
Image1.ImageUrl = pathtofile
Label1.Text = pathtofile
Response.End()



End Sub

Private Function QBCN(ByVal IRO As String) As Integer

If IRO = "FF000000" Then
QBCN = 0
ElseIf IRO = "ff000080" Then
QBCN = 1
ElseIf IRO = "ff008000" Then
QBCN = 2
ElseIf IRO = "ff008080" Then
QBCN = 3
ElseIf IRO = "ff800000" Then
QBCN = 4
ElseIf IRO = "ff800080" Then
QBCN = 5
ElseIf IRO = "ff808000" Then
QBCN = 6
ElseIf IRO = "ffc0c0c0" Then
QBCN = 7
ElseIf IRO = "ff808080" Then
QBCN = 8
ElseIf IRO = "ff0000ff" Then
QBCN = 9
ElseIf IRO = "ff00ff00" Then
QBCN = 10
ElseIf IRO = "ff00ffff" Then
QBCN = 11
ElseIf IRO = "ffff0000" Then
QBCN = 12
ElseIf IRO = "ffff00ff" Then
QBCN = 13
ElseIf IRO = "ffffff00" Then
QBCN = 14
ElseIf IRO = "ffffffff" Then
QBCN = 15
End If
Return QBCN


End Function



Sub TAKASALOAD(ByVal Y)
For X = 0 To XMAX
Dim col1 As New Color
col1 = img.GetPixel(X, Y)
TAKASA(X) = QBCN(col1.Name)
Next
End Sub
Private Sub OBJECTBYOGA()
Dim col1 As New Color
Dim i As Integer
Dim j As Integer = 1
For i = 1 To 7
col1 = System.Drawing.ColorTranslator.FromOle(QBColor(i))
Dim b As New Drawing2D.LinearGradientBrush(New Point(0 + 25 * (i - j), 0 + 25 * (i - j)), New Point(400 - 25 * (i - j), 400 - 25 * (i - j)), col1, col1)
g.FillRectangle(b, 0 + 25 * (i - j), 0 + 25 * (i - j), 400 - 50 * (i - j), 400 - 50 * (i - j))
Next
End をSub



End Class


  画像 pyramid3.png を c:\inetpub\wwwroot\pyramidwp3にコピーして、firefox ブラウザーで http://localhost/pyramidwp3/pyramid3.png
  に、アクセスすると、確かに画像が表示される。
  しかし、コードでみるとうり、imagebox に表示して、拡大するようにしているが、当然ながら、imageboxはみられない。

  visual studio commnity 2015 で実行すると、http://localhost:5427/をアクセスして、エラーメッセイジが表示されるが、Pyramidをくわえると
  目的の映像がでる。

  なんとか、イメージボックスの画像が見られるようになりませんでしょうか






引用返信 編集キー/
■80377 / inTopicNo.2)  Re[1]: asp.netで画像描画
□投稿者/ WebSurfer (961回)-(2016/07/12(Tue) 17:22:10)
No80376 (国方賢治 さん) に返信

上にアップされたコードが、先に質問者さんが立てたスレッド

http://bbs.wankuma.com/index.cgi?mode=al2&namber=80363

における私のレス No80364 で、私が、

> 上記の想像では質問者さんの望む回答になっていないのであれば、もっと情報を出してください。
>
> 具体的には、例えば、公開できる範囲で質問者さんが作成したコード、「デバッグ」と「iisマ
> ネージャーを使って実行」の具体的な違いは何かです。

とお願いしたことに対する返事であれば、別のスレッドを立てるのではなく、先のスレッドに続け
て書いていただきたかったです。次回からはそうしていただけるでしょうか?

そうではなくて、別の話だから別のスレッドを立てた等何か理由があれば、その旨書いていただけ
ませんか?

上記に対する返答をお願いします。

引用返信 編集キー/
■80390 / inTopicNo.3)  Re[2]: asp.netで画像描画
□投稿者/ 国方賢治 (5回)-(2016/07/13(Wed) 16:09:07)
No80377 (WebSurfer さん) に返信
> ■No80376 (国方賢治 さん) に返信
>
> 上にアップされたコードが、先に質問者さんが立てたスレッド
>
> http://bbs.wankuma.com/index.cgi?mode=al2&namber=80363
>
> における私のレス No80364 で、私が、
>
>>上記の想像では質問者さんの望む回答になっていないのであれば、もっと情報を出してください。
> >
>>具体的には、例えば、公開できる範囲で質問者さんが作成したコード、「デバッグ」と「iisマ
>>ネージャーを使って実行」の具体的な違いは何かです。
>
> とお願いしたことに対する返事であれば、別のスレッドを立てるのではなく、先のスレッドに続け
> て書いていただきたかったです。次回からはそうしていただけるでしょうか?


  書き方を知らなかったでけです。申し訳ありません。

  今日、分かった事ですが、http://localhost/pyramidwp3/Pyramid.aspxにアクセスすると、Pyramidになり、画像ファイルが壊れましたとの
  メッセイジにかわりました。
>
> そうではなくて、別の話だから別のスレッドを立てた等何か理由があれば、その旨書いていただけ
> ませんか?
>
> 上記に対する返答をお願いします。
>
引用返信 編集キー/
■80391 / inTopicNo.4)  Re[3]: asp.netで画像描画
□投稿者/ WebSurfer (962回)-(2016/07/13(Wed) 17:41:57)
No80390 (国方賢治 さん) に返信

私の質問の後者の方:

> 「デバッグ」と「iisマネージャーを使って実行」の具体的な違いは何か

に答えがないので勝手に想像しますが、以下の理解でいいですか? 違ったら指摘してください。


(1) 「デバッグ」

VS2015 の[デバッグ(D)]⇒[デバッグ開始(S)]で質問者さんが作ったダウンロードのページ
を実行するとブラウザに期待通りの画像が表示される。ブラウザのアドレスバーには、

http://localhost:5427/Pyramid.aspx

と表示される。上の Pyramid.aspx が質問者さんが作った(このスレッドにアップされていた
コードの)ダウンロードのためのページ。


(2) 「iisマネージャーを使って実行」

開発環境で作った Web アプリを IIS にデプロイした。物理フォルダは C:\inetpub\wwwroot\pyramidwp3
で pyramidwp3 がアプリケーション名。

IIS マネージャーを起動し、「接続」ウィンドウで Default Web Site 下の pyramidwp3 を選択し、
「操作」ウィンドウの[*:80 (htto) 参照]をクリック。ブラウザが立ち上がって以下のエラーメ
ッセージが表示される。

> HTTP エラー 403.14 - Forbidden
> Web サーバーは、このディレクトリの内容の一覧を表示しないように構成されています。

ブラウザのアドレスバーには、

http://localhost/pyramidwp3/

と表示される。つまり、私が 2 番目のスレッドで書いた以下の状況になっている。

> (2) 「iisマネージャーを使って実行」というのはダウンロードするページを要求したのでは
>   なくアプリケーションルートディレクトリを要求したということ? そして、そこに既
>   定のドキュメントがないので「Web サーバーは、このディレクトリの内容の一覧を表示
>  しないように構成されています。」というエラーになった?



今回のスレッドで新たな疑問ですが、

> imagebox に表示して、拡大するようにしているが、当然ながら、imageboxはみられない。

の imagebox とは何ですか?


> http://localhost/pyramidwp3/Pyramid.aspxにアクセスすると、Pyramidになり、画像ファイ
> ルが壊れましたとのメッセイジにかわりました。

ブラウザのアドレスバーに http://localhost/pyramidwp3/Pyramid.aspx と入力し IIS にデプロイ
した Pyramid.aspx を要求したのだと理解していますが、

一番最初のスレッドで私が書いた、

> アプリケーションルートの下に画像ファイルを保存するフォルダを作り、ワーカープロセス
> にそのフォルダに対するアクセス権(書き込み、読み取り)を与えて、

をやってないのでは? であれば 2 番目のスレッドで書いた以下の問題があると思います。

> (1) IIS Express と IIS のワーカープロセスのアクセス権の違いによる問題?


上記の話は理解できるでしょうか? 分からなかったらこのスレッドで質問してください。
引用返信 編集キー/
■80411 / inTopicNo.5)  Re[4]: asp.netで画像描画
□投稿者/ 国方賢治 (6回)-(2016/07/15(Fri) 14:34:13)
No80391 (WebSurfer さん) に返信
> ■No80390 (国方賢治 さん) に返信
>
> 私の質問の後者の方:
>
>>「デバッグ」と「iisマネージャーを使って実行」の具体的な違いは何か
>
> に答えがないので勝手に想像しますが、以下の理解でいいですか? 違ったら指摘してください。
>
>
> (1) 「デバッグ」
>
> VS2015 の[デバッグ(D)]⇒[デバッグ開始(S)]で質問者さんが作ったダウンロードのページ
> を実行するとブラウザに期待通りの画像が表示される。ブラウザのアドレスバーには、
>
> http://localhost:5427/Pyramid.aspx
>
> と表示される。上の Pyramid.aspx が質問者さんが作った(このスレッドにアップされていた
> コードの)ダウンロードのためのページ。
>
>
> (2) 「iisマネージャーを使って実行」
>
> 開発環境で作った Web アプリを IIS にデプロイした。物理フォルダは C:\inetpub\wwwroot\pyramidwp3
> で pyramidwp3 がアプリケーション名。
>
> IIS マネージャーを起動し、「接続」ウィンドウで Default Web Site 下の pyramidwp3 を選択し、
> 「操作」ウィンドウの[*:80 (htto) 参照]をクリック。ブラウザが立ち上がって以下のエラーメ
> ッセージが表示される。
>
>>HTTP エラー 403.14 - Forbidden
>>Web サーバーは、このディレクトリの内容の一覧を表示しないように構成されています。
>
> ブラウザのアドレスバーには、
>
> http://localhost/pyramidwp3/
>
> と表示される。つまり、私が 2 番目のスレッドで書いた以下の状況になっている。
>
>>(2) 「iisマネージャーを使って実行」というのはダウンロードするページを要求したのでは
>>  なくアプリケーションルートディレクトリを要求したということ? そして、そこに既
>>  定のドキュメントがないので「Web サーバーは、このディレクトリの内容の一覧を表示
> >  しないように構成されています。」というエラーになった?
>
>
>
> 今回のスレッドで新たな疑問ですが、
>
>>imagebox に表示して、拡大するようにしているが、当然ながら、imageboxはみられない。
>
> の imagebox とは何ですか?
>
>
>>http://localhost/pyramidwp3/Pyramid.aspxにアクセスすると、Pyramidになり、画像ファイ
>>ルが壊れましたとのメッセイジにかわりました。
>
> ブラウザのアドレスバーに http://localhost/pyramidwp3/Pyramid.aspx と入力し IIS にデプロイ
> した Pyramid.aspx を要求したのだと理解していますが、
>
> 一番最初のスレッドで私が書いた、
>
>>アプリケーションルートの下に画像ファイルを保存するフォルダを作り、ワーカープロセス
>>にそのフォルダに対するアクセス権(書き込み、読み取り)を与えて、
>
> をやってないのでは? であれば 2 番目のスレッドで書いた以下の問題があると思います。
> 、
>>(1) IIS Express と IIS のワーカープロセスのアクセス権の違いによる問題?
>
>   
> 上記の話は理解できるでしょうか? 分からなかったらこのスレッドで質問してください。


国方賢治の返事

1)imageboxとは、aspxのデザイン画面に、イメージコントロールをドロップして、widthを700px,heightを650pxにして、imageurlを、画像
の存在する物理ディレクトリーに、指定したものですが、デバッグでも、このイメージは、表示されませんでした。

2)デバッグ と iisマネージャーを使うことの、ご理解は、そのとうりです。
 
3)アプリケーションルートの下に画像ファイルを保存するフォルダを作り、ワーカープロセス
>>にそのフォルダに対するアクセス権(書き込み、読み取り)を与えて、
>
> をやってないのでは? であれば 2 番目のスレッドで書いた以下の問題があると思います。
> 、
>>(1) IIS Express と IIS のワーカープロセスのアクセス権の違いによる問題?

  これに、ついては、理解できていません。

  アプリケーションルートとは、ここでは、c:\inetpub\wwwroot\pyramidwp3のことですか
  そのホルダーに対するアクセス権の与え方もわかりません。

































引用返信 編集キー/
■80412 / inTopicNo.6)  Re[5]: asp.netで画像描画
□投稿者/ WebSurfer (965回)-(2016/07/15(Fri) 17:26:03)
No80411 (国方賢治 さん) に返信

引用は必要な部分のみにとどめてください。上のように全文引用されると読みにくくなります。

> 1)imageboxとは、aspxのデザイン画面に、イメージコントロールをドロップして、width
> を700px,heightを650pxにして、imageurlを、画像の存在する物理ディレクトリーに、
> 指定したものですが、デバッグでも、このイメージは、表示されませんでした。

imagebox というのは一番上の質問者さんがアップされたコードで言うと Image1 ですね。

それの ImageUrl に設定するのは Dim pathtofile = Server.MapPath("/pyramid3.png") で取
得した物理パスではダメで、相対 URL または絶対 URL を指定してください。

また、Response.End は使ってはいけません。Response.ContentType、Response.Flush、
Response.WriteFile(pathtofile) は不要です。

画像ファイル pyramid3.png をアプリケーションルート直下に置くなら、以下のようすれば
Image1 に pyramid3.png が表示されるはずです。

Response.ContentType = "image/png"
Response.Flush()
' img.Save(Response.OutputStream, Imaging.ImageFormat.Png)
' img.Save(Server.MapPath("/pyramid3.png"), Imaging.ImageFormat.Png)
img.Save(pathtofile, Imaging.ImageFormat.Png)
' Response.WriteFile("/pyramid3.png")
Response.WriteFile(pathtofile)
Image1.ImageUrl = pathtofile
Label1.Text = pathtofile
Response.End()
 ↓↓↓
img.Save(pathtofile, Imaging.ImageFormat.Png)
Image1.ImageUrl = "~/pyramid3.png"
Label1.Text = pathtofile

~ 演算子の使い方その他パスの設定についての詳しい解説は以下の記事を見てください。

ASP.NET Web サイトのパス
https://msdn.microsoft.com/ja-jp/library/ms178116(v=VS.100).aspx


> 2)デバッグ と iisマネージャーを使うことの、ご理解は、そのとうりです。

上に書いたように Image1.ImageUrl を正しく設定すれば「デバッグ」の方は期待通り Image1
のところに画像が表示されると思います。お試しください。

「デバッグ」の方は質問者さんの VS2015 Community の場合 IIS Express 上で ASP.NET が
実行されますが、pyramid3.png の書き込み / 読み出しを行うワーカープロセスのアクセス
権は質問者さんが PC にログインしたアカウントになります。質問者さんが管理者権限でロ
グインしていれば(そうしてますよね?)アプリケーションルートに pyramid3.png を書き
込む / 読み出す権限があるので問題なく動くと言うことになるはずです。

「iisマネージャー」の方もアドレスバーに http://localhost/pyramidwp3/Pyramid.aspx
入力し IIS にデプロイした Pyramid.aspx を要求すれば、「デバッグ」と同じ要求を(IIS
Express でなく)IIS にかけているのですが、アクセス権の問題でうまくいかないと思います。

「iisマネージャー」の方は、Windows 10 に付属の IIS の場合はワーカープロセスのアカウ
ントはデフォルトでアプリケーションプール ID になります。アプリケーションプール ID
は書き込み権限を持っていないので img.Save(pathtofile, Imaging.ImageFormat.Png) と
いうところで失敗するはずです。

IIS のアカウントについての詳細は以下の記事を見てください。

IIS 7.0 での組み込みユーザーとグループ アカウントとは
https://technet.microsoft.com/ja-jp/library/dd939094.aspx

アプリケーション プール ID
https://technet.microsoft.com/ja-jp/library/ee886292.aspx


> アプリケーションルートとは、ここでは、c:\inetpub\wwwroot\pyramidwp3のことですか

アプリケーションルートについてはその通りです。


> そのホルダーに対するアクセス権の与え方もわかりません。

しかし、ワーカープロセスにアプリケーションルート全体に対する書き込み権限を与えるのは
セキュリティ的にやりすぎです。

なので、アプリケーションルート下にサブフォルダを作って、そのフォルダに対する書き込み
権限を与えるようにします。そして、pyramid3.png はそのサブフォルダで書き込み、読み出し
を行うようにしてください。

具体的には、例えば images と言うサブフォルダをアプリケーションルート直下に作った場合、

c:\inetpub\wwwroot\pyramidwp3\images

には既に IIS_IUSRS グループが読み取り権を持って設定されているはずなので、それに書き込
み権限を追加します。

もちろん、上記の変更に応じたプログラムの修正も必要です。

Dim pathtofile = Server.MapPath("~/images/pyramid3.png")
Image1.ImageUrl = "~/images/pyramid3.png"

IIS_IUSRS が何かについては上に紹介した記事の「IIS 7.0 での組み込みユーザーとグループ
アカウントとは」を見てください。"ワーカープロセスのトークンに対して実行時に IIS_IUSRS
メンバーシップが自動的に追加されるようになりました" というところがポイントです。

引用返信 編集キー/
■80413 / inTopicNo.7)  Re[6]: asp.netで画像描画
□投稿者/ PANG2 (122回)-(2016/07/15(Fri) 18:03:31)
ASP.NETで動的に画像を表示
http://d.hatena.ne.jp/akabeina/20130223/1361629083

の最初の方法で充分だと思いますが。。。


■質問
Pyramid.aspx に貼り付けたイメージコントロール(Image1)に動的な画像を表示したい。

■回答
別のaspxファイル ImageView.aspx を用意する。
ImageView.aspx内部で、Imageオブジェクト(Bitmap)にGraphicsオブジェクトのDraw系メソッドなどで描画し
Imageオブジェクトを直接レスポンスに書き込む。(ファイルを中継する必要ない)

Pyramid.aspx側では、

Image1.ImageUrl = "ImageView.aspx"

とする。

引用返信 編集キー/
■80420 / inTopicNo.8)  Re[6]: asp.netで画像描画
□投稿者/ ???????? (1回)-(2016/07/16(Sat) 15:16:39)
No80412 (WebSurfer さん) に返信
> ■No80411 (国方賢治 さん) に返信
>
>国方賢治の返事
 指摘のとうりに次のように、コードを変えました

  Imports System.Drawing
  Public Class Pyramid
Inherits System.Web.UI.Page
Dim img As New Bitmap(500, 500)
Dim g As Graphics = Graphics.FromImage(img)
Const XMAX = 399, YMAX = 399
Const HABA = 60, MITUDO = 25, RITTAIDO = 2
Dim TAKASA(0 To XMAX), DOT(0 To XMAX) As String
Dim pathtofile = Server.MapPath("~/images/pyramid3.png")
Private pyramid3 As Object

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load


OBJECTBYOGA()
For Y = 0 To YMAX
' Erase DOT
For i = 0 To XMAX
DOT(i) = ""
Next

TAKASALOAD(Y)
For X = 0 To XMAX
Dim TAKASA1 As Integer = TAKASA(X) * RITTAIDO
If DOT(X) = "" Then
If Rnd() * 100 < MITUDO Then
DOT(X) = "7"
Else
DOT(X) = "0"
End If
End If
img.SetPixel(X, Y, System.Drawing.ColorTranslator.FromOle(QBColor(Val(DOT(X)))))
Dim TUGI As Integer = X + HABA - (TAKASA1 * RITTAIDO)
If TUGI >= 0 And TUGI <= XMAX Then

DOT(TUGI) = DOT(X)
End If
Next
Next




' Response.ContentType = "image/png"
' Response.Flush()
' img.Save(Response.OutputStream, Imaging.ImageFormat.Png)
' img.Save(Server.MapPath("/pyramid3.png"), Imaging.ImageFormat.Png)
' img.Save(pathtofile, Imaging.ImageFormat.Png)
' Response.WriteFile("/pyramid3.png")
' Response.WriteFile(pathtofile)
' Image1.ImageUrl = pathtofile
' Label1.Text = pathtofile
' Response.End()

img.Save(pathtofile, Imaging.ImageFormat.Png)
Image1.ImageUrl = "~/images/pyramid3.png"
Label1.Text = pathtofile


End Sub

Private Function QBCN(ByVal IRO As String) As Integer

If IRO = "FF000000" Then
QBCN = 0
ElseIf IRO = "ff000080" Then
QBCN = 1
ElseIf IRO = "ff008000" Then
QBCN = 2
ElseIf IRO = "ff008080" Then
QBCN = 3
ElseIf IRO = "ff800000" Then
QBCN = 4
ElseIf IRO = "ff800080" Then
QBCN = 5
ElseIf IRO = "ff808000" Then
QBCN = 6
ElseIf IRO = "ffc0c0c0" Then
QBCN = 7
ElseIf IRO = "ff808080" Then
QBCN = 8
ElseIf IRO = "ff0000ff" Then
QBCN = 9
ElseIf IRO = "ff00ff00" Then
QBCN = 10
ElseIf IRO = "ff00ffff" Then
QBCN = 11
ElseIf IRO = "ffff0000" Then
QBCN = 12
ElseIf IRO = "ffff00ff" Then
QBCN = 13
ElseIf IRO = "ffffff00" Then
QBCN = 14
ElseIf IRO = "ffffffff" Then
QBCN = 15
End If
Return QBCN


End Function



Sub TAKASALOAD(ByVal Y)
For X = 0 To XMAX
Dim col1 As New Color
col1 = img.GetPixel(X, Y)
TAKASA(X) = QBCN(col1.Name)
Next
End Sub
Private Sub OBJECTBYOGA()
Dim col1 As New Color
Dim i As Integer
Dim j As Integer = 1
For i = 1 To 7
col1 = System.Drawing.ColorTranslator.FromOle(QBColor(i))
Dim b As New Drawing2D.LinearGradientBrush(New Point(0 + 25 * (i - j), 0 + 25 * (i - j)), New Point(400 - 25 * (i - j), 400 - 25 * (i - j)), col1, col1)
g.FillRectangle(b, 0 + 25 * (i - j), 0 + 25 * (i - j), 400 - 50 * (i - j), 400 - 50 * (i - j))
Next
End Sub

  デバッグしたところ、

  img.Save(.........)
でエラーが発生しました。
  型 'System.Runtime.InteropServices.ExternalException' の例外が Microsoft.VisualBasic.dll で発生しましたが、ユーザー コード内ではハンドル  されませんでした

  追加情報:GDI+ で汎用エラーが発生しました。

  残念です。


引用返信 編集キー/
■80421 / inTopicNo.9)  Re[7]: asp.netで画像描画
□投稿者/ WebSurfer (967回)-(2016/07/16(Sat) 16:56:59)
No80420 (???????? さん) に返信

> デバッグしたところ、

というのは具体的にどういう環境でどのように試したのですか?

自分の環境(Vista SP2 32-bit, IIS7, ASP.NET 4, Visual Studio 2010 Professional, 
Web サイトプロジェクト、IE9)で質問者さんのコードをコピペして試してみましたが、
実行結果は以下の画像のようになります。(pyramid3.png がサブフォルダ内に生成され
Image1 に pyramid3.png が表示されています)

http://surferonwww.info/BlogEngine/image.axd?picture=2016%2f7%2fPyramidaspx.jpg

なので、やり方もしくは環境の違いの問題だと思います。Azure Web App では GDI+ API
が使えないそうですが、ひょっとしてそういう問題?

一応検証に使ったコードを以下にアップしておきます。

サブフォルダは images ではなく FileUploadTest に変えました(既存のアプリのその
サブフォルダにはアクセス権を与え済みなので)。あと、型の問題で Option Strict On
では質問者さんのコードはエラーになるのですが、そこは修正しました。いずれも本質的
なところとは関係ないです。

0157-Pytamid.aspx.vb
--------------------

Option Strict On

Imports System.Drawing

Partial Class _0157_Pyramid
    Inherits System.Web.UI.Page

    Dim img As New Bitmap(500, 500)
    Dim g As Graphics = Graphics.FromImage(img)
    Const XMAX = 399, YMAX = 399
    Const HABA = 60, MITUDO = 25, RITTAIDO = 2
    Dim TAKASA(0 To XMAX) As Integer
    Dim DOT(0 To XMAX) As String
    Dim pathtofile As String = Server.MapPath("~/FileUploadTest/pyramid3.png")
    Private pyramid3 As Object


    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        OBJECTBYOGA()
        For Y = 0 To YMAX
            ' Erase DOT
            For i = 0 To XMAX
                DOT(i) = ""
            Next

            TAKASALOAD(Y)
            For X = 0 To XMAX
                Dim TAKASA1 As Integer = TAKASA(X) * RITTAIDO
                If DOT(X) = "" Then
                    If Rnd() * 100 < MITUDO Then
                        DOT(X) = "7"
                    Else
                        DOT(X) = "0"
                    End If
                End If
                img.SetPixel(X, Y, System.Drawing.ColorTranslator.FromOle(QBColor(Int32.Parse(DOT(X)))))
                Dim TUGI As Integer = X + HABA - (TAKASA1 * RITTAIDO)
                If TUGI >= 0 And TUGI <= XMAX Then

                    DOT(TUGI) = DOT(X)
                End If
            Next
        Next

        img.Save(pathtofile, Imaging.ImageFormat.Png)
        Image1.ImageUrl = "~/FileUploadTest/pyramid3.png"
        Label1.Text = pathtofile

    End Sub

    Private Function QBCN(ByVal IRO As String) As Integer

        If IRO = "FF000000" Then
            QBCN = 0
        ElseIf IRO = "ff000080" Then
            QBCN = 1
        ElseIf IRO = "ff008000" Then
            QBCN = 2
        ElseIf IRO = "ff008080" Then
            QBCN = 3
        ElseIf IRO = "ff800000" Then
            QBCN = 4
        ElseIf IRO = "ff800080" Then
            QBCN = 5
        ElseIf IRO = "ff808000" Then
            QBCN = 6
        ElseIf IRO = "ffc0c0c0" Then
            QBCN = 7
        ElseIf IRO = "ff808080" Then
            QBCN = 8
        ElseIf IRO = "ff0000ff" Then
            QBCN = 9
        ElseIf IRO = "ff00ff00" Then
            QBCN = 10
        ElseIf IRO = "ff00ffff" Then
            QBCN = 11
        ElseIf IRO = "ffff0000" Then
            QBCN = 12
        ElseIf IRO = "ffff00ff" Then
            QBCN = 13
        ElseIf IRO = "ffffff00" Then
            QBCN = 14
        ElseIf IRO = "ffffffff" Then
            QBCN = 15
        End If
        Return QBCN

    End Function

    Sub TAKASALOAD(ByVal Y As Integer)
        For X = 0 To XMAX
            Dim col1 As New Color
            col1 = img.GetPixel(X, Y)
            TAKASA(X) = QBCN(col1.Name)
        Next
    End Sub

    Private Sub OBJECTBYOGA()
        Dim col1 As New Color
        Dim i As Integer
        Dim j As Integer = 1
        For i = 1 To 7
            col1 = System.Drawing.ColorTranslator.FromOle(QBColor(i))
            Dim b As New Drawing2D.LinearGradientBrush(New Point(0 + 25 * (i - j), 0 + 25 * (i - j)),
                                                       New Point(400 - 25 * (i - j), 400 - 25 * (i - j)), col1, col1)
            g.FillRectangle(b, 0 + 25 * (i - j), 0 + 25 * (i - j), 400 - 50 * (i - j), 400 - 50 * (i - j))
        Next
    End Sub


End Class


0157-Pyramid.aspx
-----------------

<%@ Page Language="VB" AutoEventWireup="false" 
    CodeFile="0157-Pyramid.aspx.vb" Inherits="_0157_Pyramid" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Image ID="Image1" runat="server" width="700px" Height="650px" />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>

引用返信 編集キー/
■80422 / inTopicNo.10)  Re[7]: asp.netで画像描画
□投稿者/ WebSurfer (968回)-(2016/07/16(Sat) 17:03:21)
No80420 (???????? さん) に返信

???????? さん = 国方賢治 さん ですよね?

ハンドル名に日本語を使うとクッキーか何かの問題でそうなることがあるそうです。
[送信」ボタンを押す前に[名前 (*必須)]欄をチェックしてください
引用返信 編集キー/
■80436 / inTopicNo.11)  Re[8]: asp.netで画像描画
□投稿者/ kunikata (1回)-(2016/07/18(Mon) 13:54:26)
No80421 (WebSurfer さん) に返信
> ■No80420 (???????? さん) に返信
>
>コードを変えて、visual studio 2015 で実行しましたが、img1.Saveの所でエラーが発生。FileUpIoadTestを除くと、visual studio 2015
では、表示されましたが、iisマネージャーの Default Web Siteに アプリケーションの追加をしましたが、
http://localhost/pyramidwp3.Pyramid.aspxのアドレスでエラーが発生しました。
やはり、画像ファイルの前に、ホルダーを作る必要があるようですが、2015では、エラーが発生してしまい、どうしようもありません。
 いいところ、まで行っているのに、残念。環境の違いとなれば、どうしようもないですが。

引用返信 編集キー/
■80437 / inTopicNo.12)  Re[9]: asp.netで画像描画
□投稿者/ WebSurfer (973回)-(2016/07/18(Mon) 15:08:31)
No80436 (kunikata さん) に返信

kunikata さん = 国方賢治 さん ですよね?

利用規約を読んでください。以下の注意書きがあります。

"一貫して同じハンドルを使用し、場を混乱させないようにしましょう。同じハンドル
の方が質問の背景がわかりやすいです (自作自演をしたり別人を装うのは回答者の善意
を裏切る行為です)。"

kunikata さんに変えるのであれば、今後はそれをずっと使っていただくようお願いし
ます。


で、質問者さんのレスですが、すみませんが日本語レベルで意味が分かりません。

> コードを変えて、visual studio 2015 で実行しましたが、img1.Saveの所でエラーが発生。

「コードを変えて」とは具体的にどのようにしたのですか? 私がアップしたコードの
通りにしたということですか? とすると、FileUpIoadTest というフォルダをアプリ
ケーションルートに追加する必要がありますが、それはやりましたか?

> FileUpIoadTestを除くと、visual studio 2015では、表示されましたが、

「FileUpIoadTestを除く」というのはコードから除く、すなわち、

"~/FileUploadTest/pyramid3.png"
 ↓↓↓
"~/pyramid3.png"

のようにしたということだと想像してます。それでうまく行ったということはアプリ
ケーションルートに FileUpIoadTest というフォルダを追加せずにやったということ
ですよね?

> iisマネージャーの Default Web Siteに アプリケーションの追加をしましたが、
> http://localhost/pyramidwp3.Pyramid.aspxのアドレスでエラーが発生しました。

http://localhost/pyramidwp3.Pyramid.aspx が間違っているようですが?

> やはり、画像ファイルの前に、ホルダーを作る必要があるようですが、2015では、
> エラーが発生してしまい、どうしようもありません。

意味不明です。

何にせよどうしようもないことは絶対ありません。

> いいところ、まで行っているのに、残念。環境の違いとなれば、どうしようもないですが。

環境の違いの問題も間違いなく解消できるはず。どうしようもないということは絶対
にありません。

要はやり方の問題だと思いますが、話がうまく通じてなくて、こちらの指摘している
ことがきちんとされてないのがうまく行かない原因だと思います。
引用返信 編集キー/
■80438 / inTopicNo.13)  Re[7]: asp.netで画像描画
□投稿者/ kunikata (2回)-(2016/07/18(Mon) 15:09:48)
No80413 (PANG2 さん) に返信
> ASP.NETで動的に画像を表示
> http://d.hatena.ne.jp/akabeina/20130223/1361629083
>
> の最初の方法で充分だと思いますが。。。
>
>
> ■質問
> Pyramid.aspx に貼り付けたイメージコントロール(Image1)に動的な画像を表示したい。
>
> ■回答
> 別のaspxファイル ImageView.aspx を用意する。
> ImageView.aspx内部で、Imageオブジェクト(Bitmap)にGraphicsオブジェクトのDraw系メソッドなどで描画し
> Imageオブジェクトを直接レスポンスに書き込む。(ファイルを中継する必要ない)
>
> Pyramid.aspx側では、
>
> Image1.ImageUrl = "ImageView.aspx"
>
>


質問
  visual studio 2015 では、イメージコントロールに表示されますが、iisマネージャーと関連付けをすると、エラーが発生が発生します。
  イメージファイルを直接配置できるが、ホルダーのしたに配置すると、visual studio 2015でエラーが発生します。
  回答者さんの回答が理解できないので、具体的に教えてください。
  どうしても、イメージコントロールに画像を表示するテクニックを身につけたいのです。
  Image オブジェクトを直接レスポンスに書き込むには、どうすれば、良いのでしょうか。

  ImageView.aspx には、Pyramid.aspx と同じ画像を書くということですか



引用返信 編集キー/
■80439 / inTopicNo.14)  Re[8]: asp.netで画像描画
□投稿者/ PANG2 (123回)-(2016/07/18(Mon) 15:21:35)
まずは、以下のサンプルを動作させることを目標にして下さい。

>ASP.NETで動的に画像を表示
>http://d.hatena.ne.jp/akabeina/20130223/1361629083

引用返信 編集キー/
■80440 / inTopicNo.15)  Re[10]: asp.netで画像描画
□投稿者/ kunikata (3回)-(2016/07/18(Mon) 16:35:58)
No80437 (WebSurfer さん) に返信
> ■No80436 (kunikata さん) に返信
>
> kunikata より、返事します。
>
>
>>コードを変えて、visual studio 2015 で実行しましたが、img1.Saveの所でエラーが発生。
>
> 「コードを変えて」とは具体的にどのようにしたのですか? 私がアップしたコードの
> 通りにしたということですか? とすると、FileUpIoadTest というフォルダをアプリ
> ケーションルートに追加する必要がありますが、それはやりましたか?

  クラス名以外は全部同じにしました。
  ホルダー(FieleUpLoadTest)の下に画像ファイルを置くと、何故か、エラーが発生。 
 
>
>>FileUpIoadTestを除くと、visual studio 2015では、表示されましたが、
>
> 「FileUpIoadTestを除く」というのはコードから除く、すなわち、
>
> "~/FileUploadTest/pyramid3.png"
>  ↓↓↓
> "~/pyramid3.png"
>
> のようにしたということだと想像してます。それでうまく行ったということはアプリ
> ケーションルートに FileUpIoadTest というフォルダを追加せずにやったということ
> ですよね?
 
  御想像 とうりです。visual studio 2015 のデバッグ、デバッグ無しで実行とも、イメージコントロールが表示されました。
  ラベルに表示された、ディレクトリーは、PyramidWebPro3のプロジェクトディレクトリーでした。


>>iisマネージャーの Default Web Siteに アプリケーションの追加をしましたが、
>>http://localhost/pyramidwp3.Pyramid.aspxのアドレスでエラーが発生しました。
>
> http://localhost/pyramidwp3.Pyramid.aspx が間違っているようですが?
> 書き間違いで.のところが、/ です。すみませんでした。


>>やはり、画像ファイルの前に、ホルダーを作る必要があるようですが、2015では、
>>エラーが発生してしまい、どうしようもありません。、
>
> 意味不明です。
>
> すみません。

 visual studio 2015 より、公開すると、iisマネージャーの Default Web Siteに、自動的に関係付けされますが、aspx.vb,
pyramid3.pngは、コピーしています。このへんから、おかしいと思い、Default Web Siteにファイルを追加しましたが、
 これも、エラーが発生。
 
  手のうちようがありませんでした。
































































































































































 
引用返信 編集キー/
■80445 / inTopicNo.16)  Re[11]: asp.netで画像描画
□投稿者/ WebSurfer (974回)-(2016/07/18(Mon) 23:00:33)
No80440 (kunikata さん) に返信

これ以上このまま続けても話が通じなくて、解決するとは思えません。もう無
理と思ったのですが、最後にもう一つだけ・・・

ホントに画像データをファイルとして保存する必要があるのですか?

もしあるとしても、それは一旦忘れて、作成した画像データをブラウザに表示
できるようにするところまでやってみませんか?

作成した画像データをファイルとして保存しようとするからアクセス権の問題
で敷居が高くなるのです。それがなければもっと簡単にできます。

その方向に進んでいただけないと、もう自分としてはお手上げで、すみません
がこの先自分がお役に立てることはなさそうです。
引用返信 編集キー/
■80500 / inTopicNo.17)  Re[9]: asp.netで画像描画
□投稿者/ kunikata (4回)-(2016/07/23(Sat) 14:04:17)
No80439 (PANG2 さん) に返信
> まずは、以下のサンプルを動作させることを目標にして下さい。
>
> >ASP.NETで動的に画像を表示
> >http://d.hatena.ne.jp/akabeina/20130223/1361629083
> kunikataの返事。
 
 image.urlのところを、......aspxにすると、本番ではエラーが発生。。画像ファイルの名前を書いたら、本番でもちゃんと、イメージコントロール
 が、表示され、画像も表示されました。指摘どうりでは、ありませんが、感謝します。有難うございました。
解決済み
引用返信 編集キー/
■80501 / inTopicNo.18)  Re[10]: asp.netで画像描画
□投稿者/ WebSurfer (977回)-(2016/07/23(Sat) 17:24:48)
No80500 (kunikata さん) に返信

> image.urlのところを、......aspxにすると、本番ではエラーが発生。。画像ファイルの名前
> を書いたら、本番でもちゃんと、イメージコントロールが、表示され、画像も表示されました。

image.url ではなくて ImageUrl ですね。で、

Image1.ImageUrl = "~/pyramid.aspx"

はサーバーエラーで、

Image1.ImageUrl = "~/pyramid3.png"

で画像が表示されたということですと、それは最初の質問で、

> 画像 pyramid3.png を c:\inetpub\wwwroot\pyramidwp3にコピーして、firefox ブラウザー
> で http://localhost/pyramidwp3/pyramid3.png に、アクセスすると、確かに画像が表示される。

とした時の pyramid3.png が Image コントロールに表示されているのではないですか?

そうだとすると、pyramid.aspx で動的に作った .png 画像を Image コントロールに表示するという
元々の目的(ですよね?)は果たせてなくて、解決にはなっていませんけど。
引用返信 編集キー/
■80514 / inTopicNo.19)  Re[11]: asp.netで画像描画
□投稿者/ kunikata (5回)-(2016/07/25(Mon) 13:40:29)
No80501 (WebSurfer さん) に返信
> ■No80500 (kunikata さん) に返信
>
>>websurver に返信。。。。kunikata
>
>authenticated users 又はusersにアクセス権を与イメージコントロールに、画像と、物理ディレクトリーが表示されました。。
苦労のかいがありました。visuai studio 2015では、表示されるのに、サーバーでは、表示されなくて、苦労しましたが、分かったような気がします。
長い間のご指導、有難うございました。
解決済み
引用返信 編集キー/
■80516 / inTopicNo.20)  Re[8]: asp.netで画像描画
 
□投稿者/ PANG2 (124回)-(2016/07/25(Mon) 14:16:54)
2016/07/25(Mon) 14:18:37 編集(投稿者)

「画像ファイル」も「アクセス権」も必要ない簡単な方法を提示しましたが、理解されなかったようですね。

ちなみにファイルを中継する方法だと同時アクセスがあると破綻します。
解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -