- PR -

.NETで画像制御したいのですが・・・

1
投稿者投稿内容
みらぞー
会議室デビュー日: 2004/10/11
投稿数: 13
投稿日時: 2004-10-11 22:28
.NET初心者です。どなたかご指導お願いします。
画像イメージ(TIFファイル等)をWebフォームに表示して、
拡大・縮小・反転(左右90度づつ反転させる)処理を行いたいのです。

「Crystal Reports」等のソフトは使用せずに、
ASP.NET(C#)の機能で実現可能なのでしょうか?
(もしくはソフトを使用した方がいいのでしょうか?)
よろしくお願いします。

小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-10-12 10:29
HTML、というかスクリプトのレベルで可能では?

拡大等
http://sussiweb.com/hp/html/img/03.htm

反転
http://sussiweb.com/hp/html/img/16.htm

こんな感じ。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-10-12 10:49
今日は

graphics を使えば可能です
下記に例を示します。
Bitmap bm=new Bitmap(ファイル名);
graphics g = Graphics.FromImage(bm);
g.RotateTransform(回転角度);
g.ScaleTransform(xs,ys);
その後はファイルへ落とすか、ストリームで返すか、その内容によります。
みらぞー
会議室デビュー日: 2004/10/11
投稿数: 13
投稿日時: 2004-10-12 15:03
貴重なアドバイスありがとうございます。

さらに皆様にお知恵を頂きたく記述しました。

rvmxさんに頂いた内容で処理しようと考えてます。
しかし、素人知識を振り絞っていますがうまく動作してくれません。
申し訳ありませんが、アドバイスをいただけるとありがたいです。

私は以下のページを参考にしています。
<http://www.atmarkit.co.jp/fdotnet/dotnettips/019showbmp/showbmp.html>
しかし若干異なった「Webフォーム上のimage」に表示しようとしてます。(imageurlを使用してます)
四苦八苦していますがうまく処理できない状態です。

簡単なサンプルを記述いただけるとありがたいです。
よろしくお願いします。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-10-12 15:45
こんにちは。

>しかし若干異なった「Webフォーム上のimage」に表示しようとしてます。
画像変換処理以前に、Webアプリケーションにおいて画像を動的に生成して表示する仕組みが理解できていないような気がしますが、いかがでしょうか?

小野さんが返答をしているので、自分が答えるのも恐縮ですが、小野さんのHPに画像を表示するサンプルがあります。
http://homepage3.nifty.com/dotnetfan/web/web22.html

ポイントは画像を表示するASPXと、生成するASPXは別々に用意する必要があることと、画像データはストリームでクライアントに送り返す必要があることでしょうか。。。
みらぞー
会議室デビュー日: 2004/10/11
投稿数: 13
投稿日時: 2004-10-12 19:03
ご回答ありがとうございます。

>画像変換処理以前に、Webアプリケーションにおいて画像を動的に生成して表示する
>仕組みが理解できていないような気がしますが、いかがでしょうか?
その通りでございます。社会人2年目でこの度はじめて.NETを使っての開発になります。日々勉強中です。。。
他の事でもご質問を記述することが多くなると思いますがよろしくお願いします。

で、私が作成しているロジックを記述します。
イメージファイルは表示されるのですが“回転”がされていないのです。
どこに原因があるのか調査してますがわからない状況です。
ご意見よろしくお願いします。

<ボタンクリックイベント>
//URLの指定
string URL="http://localhost/WebApplication1/PIX/imageJpg.jpg";

WebClient wc = new WebClient();
Stream stream = wc.OpenRead(URL);

//
Bitmap bm = new System.Drawing.Bitmap(stream);
using(System.Drawing.Graphics g = Graphics.FromImage(bm))
{
     //回転
gu.RotateTransform(90.0F);
Response.ContentType="image/JPEG";
bm.Save(Response.OutputStream,ImageFormat.Jpeg);
}
stream.Close();
ya
大ベテラン
会議室デビュー日: 2002/05/03
投稿数: 212
投稿日時: 2004-10-12 20:41
Graphics.RotateTransformは変換行列をセットするだけです。画像を回転させるわけではありません。「レンダリングするとき」の「座標変換行列」を設定するだけです。
この場合、具体的な流れとしては、
レンダリング先の作成→レンダリング先のGraphicsオブジェクト作成→変換行列のセット→レンダリング(ソース画像をターゲットに描く)→レンダリング結果をレスポンスとして返す
となります。

コード:

...
using(Bitmap source = new Bitmap(stream))
using(Bitmap target = new Bitmap(source.Height, source.Width))
using(Graphics g = Graphics.FromImage(target))
{
 //変換行列のセット
 g.RotateTransform(90.0f);
 g.TranslateTransform(source.Height, 0.0f);

 //レンダリング
 g.DrawImage(source, 0, 0);

 Response.ContentType = "image/jpeg";
 target.Save(Response.OutputStream, ImageFormat.Jpeg);
 Response.End();
}
...



適当にかいたので間違ってるかもしれません(特に変換行列)。
みらぞー
会議室デビュー日: 2004/10/11
投稿数: 13
投稿日時: 2004-10-13 09:21
ご回答いただいたみなさま、ありがとうございました。
大変勉強になりました。

別の書き込みもするかと思いますがよろしくお願いします。
1

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