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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■2429  イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ アルテイシア -(2007/04/07(Sat) 00:24:38)

    分類:[C# (Windows)] 

    開発環境はC# .NETです。
    VisualStudio2005を使用してコーディングを行っています。
    現在パズルゲームを作成しようと考えています。
    パズルに使用するピースですが、ユーザが任意に選択した画像をプログラミングで規定の画像サイズに切り出し、それをパズルピースとして使用する仕様を考えています。

    ファイルを開くボタン押下で、OpenFileDialogを表示し、ユーザに任意のイメージ画像を選択させます。その選択された画像を58pixcelx58pixcelのサイズの画像を9x6の54枚(パズルピース)に分割します。
    以下がその仕様を考えたソースコードです。


    private void selectButton_Click(object sender, EventArgs e)
    {
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    imageShow(openFileDialog.FileName);
    }

    private void imageShow(string filePath)
    {
    Bitmap _bmp = new Bitmap(58, 58);
    Image originalImage = Image.FromFile(filePath);
    Graphics g = Graphics.FromImage(_bmp);
    Rectangle rect;
    int x = 0;
    int y = 0;
    string title = "C:\\Image";

    int index = 0;
    for (x = 0; x < 9; x++) {
    for (y = 0; y < 6; y++) {
    index++;
    rect = new Rectangle((x * 58) , (58 * y), 58, 58);
    g.DrawImage(originalImage, 0, 0, rect, GraphicsUnit.Pixel);
    _bmp.Save(title + index.ToString()+ ".jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
    Thread.Sleep(50);
    }
    y = 0;
    }
    }

    パズルピースとして使用する予定のサイズ58x58のBitmapを作成します。そのBitmapからGraphicsを作成し、Graphicsに対してDrawImageでオリジナル画像(ユーザが選択した画像)を58Pixcelごとに分割し、分割されて作成されたImageをSave()にてファイル保存しています。

    この仕様で一応ファイルは分割されて作成されるのですが、どうも画像の位置が合わないのです。画質も悪いですし。手動で同じオリジナルファイルを58Pixcelごとに切り出したものと比較しますと顕著にちがいます。

    何か足りない処理や、他の対応策がございましたらご教授のほどよろしくお願いいたします。今回の仕様で、切り出したファイルをローカルマシンに保存する、と言うのは必須事項になっております。
    どうか皆様よろしくお願いいたします。
親記事 /過去ログ11より / 関連記事表示
削除チェック/

■18388  Re[9]: 他のプログラムを起動する方法に関する,コンパイ
□投稿者/ はつね -(2008/05/13(Tue) 23:01:47)
    No18383 (初心者なハム さん) に返信
    > おられるかと思いますが,2005のC#環境下でプログラムを実行し, 
    >
    >                    C#のアプリ ⇒ (2005で変換した)VC6アプリ側
    >
    > へと,もっていきたいのです.

    「(2005で変換した)VC6アプリ側」は決してtest3.dswじゃないと思います。
    VC6で作成したソースをVC++2005の取り込んでそこでビルド(コンパイル)して作成したtest3.exeを指定するのではないのでしょうか。


    >ファイルの種類でいう,VC++ 6 Workspace (.dsw)でして,これを自動的に実行して,

    test3.dswを自動的に実行というのは、エクスプローラからtest3.dswをダブルクリックするとVS++6の開発環境が立ち上がることを言っていませんか?
    それは、.dswという拡張子に対してVC++6の開発環境が割り当てられているからです。
    決してtest3.dswが動いている訳ではありませんから、配布先にもVC++6の開発環境一式が必須になりますよ。
記事No.18171 のレス /過去ログ37より / 関連記事表示
削除チェック/

■47859  描写の一時停止
□投稿者/ gonna -(2010/03/16(Tue) 18:12:31)

    分類:[VB.NET/VB2005 以降] 

    こんにちは。
    今Form上に直接描写を行っています。
    然し、結構な量を描写しているため、ちらつきが発生します。
    ListBoxの様な場合はBegin/EndUpdateで出来るのですが、Formには其れがありません。
    どのようにすればよいのかご教授願います。

    ---Code---
    Private Sub TestForm2_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

    Dim g As Graphics = Me.CreateGraphics
    For i As Integer = 1 To 20
    For j As Integer = 1 To 15
    g.DrawImage(My.Resources.Image, i * 32, j * 32)
    Next
    Next
    End Sub
    ---/Code---
    VB2008EE
親記事 /過去ログ81より / 関連記事表示
削除チェック/

■75501  Re[2]: フォーム上のテキストボックス移動
□投稿者/ sast -(2015/03/31(Tue) 16:35:07)
    No75483 (daive さん) に返信

    FlowLayoutPanelが近い機能があるんですね。
    有り難う御座いました。
記事No.75482 のレス /過去ログ127より / 関連記事表示
削除チェック/

■82877  Re[2]: 長いパス名のファイルをリネーム、削除する方法
□投稿者/ がもう -(2017/02/17(Fri) 13:53:06)
    ありがとうございます。
    うまくいきました。

    ところで、もう一つ質問があります
    http://macro-excel-vba.blogspot.jp/2015/06/dir.html

    このページにあるようにDir関数では、
    256文字以上のファイルパスを取得することができないはずです。
    しかし私の環境では260文字であっても普通に取得することができます。

    これはVB.NETとVBAの仕様の違いなのでしょうか?
記事No.82875 のレス /過去ログ141より / 関連記事表示
削除チェック/

■85015  Re[2]: 正規表現の考え方がわかりません
□投稿者/ 夜叉丸 -(2017/09/05(Tue) 13:55:07)
    No85010 (魔界の仮面弁士 さん) に返信
    > 2017/09/05(Tue) 11:36:37 編集(投稿者)

    >>ra.ToString() = "{X=3, Y=6, Width=9, Height=12}"
    >>Match m = new Regex(@"{X=(?<X>[-]*\d+),Y=(?<Y>[-]*\d+),Width=(?<Width>[-]*\d+),Height=(?<Height>[-]*\d+)}").Match(ra.ToString());
    >
    > これではヒットしないと思いますよ。元の文字列が
    > "{X=3, Y=6, Width=9, Height=12}" ではなく
    > "{X=3,Y=6,Width=9,Height=12}" であったのなら、
    > m.Groups["X"] で拾えるでしょうけれども。

    Rectangle ra = new Rectangle(3,6,9,12);
    です。確認したら"{X=3,Y=6,Width=9,Height=12}"でした。

    > 単純には
    >  [+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9]
    > などが思い当たります。
    例外はハンドルされていませんとなります。
    System.ArgumentException:'解析中 "{X~(?<X>[+-]?[0-9]+.]?[0-9]([eE]・・・・・

    RectangleF raf = new RectangleF(3f, -6.2f, 9.3f, 12.4f);
    Match f = new Regex(@"{X=(?<X>[+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9])," +
    "Y=(?<Y>[+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9])," +
    "Width=(?<Width>[+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9]))," +
    "Height=(?<Height>[+-]?[0-9]+[.]?[0-9]([eE][+-])?[0-9]))}").Match(raf.ToString());
記事No.85005 のレス /過去ログ145より / 関連記事表示
削除チェック/

■87307  Re[7]: 印刷した用紙に穴開けパンチ用の線を引きたい
□投稿者/ N -(2018/05/09(Wed) 16:47:40)
    No87302 (shu さん) に返信
    > ■No87301 (N さん) に返信
    >
    > e.PageBounds
    > または
    > e.Graphics.VisibleClipBounds
    > を使用して
    > y方向の中央を求めるとよいと思います。

    教えてくださったもので色々と調べてみたのですが、VB初心者であるため分かりませんでした…。
    申し訳ありませんが、何かヒントとなるような例文を教えて頂けないでしょうか?
記事No.87296 のレス /過去ログ150より / 関連記事表示
削除チェック/

■87313  Re[8]: 印刷した用紙に穴開けパンチ用の線を引きたい
□投稿者/ shu -(2018/05/10(Thu) 09:01:58)
    No87307 (N さん) に返信

    > 教えてくださったもので色々と調べてみたのですが、VB初心者であるため分かりませんでした…。
    > 申し訳ありませんが、何かヒントとなるような例文を教えて頂けないでしょうか?

    VisibleClipBoundsを使用するとして

    Dim g = e.Graphics
    g.PageUnit = GraphicsUnit.Millimeter
    Dim bd = g.VisibleClipBounds
    Dim x1 = bd.Left
    Dim x2 = x1 + 10.0!
    Dim y = bd.Top + bd.Height / 2.0!

    このような感じで座標を取得するとよいかと思います。
記事No.87296 のレス /過去ログ150より / 関連記事表示
削除チェック/

■87315  Re[9]: 印刷した用紙に穴開けパンチ用の線を引きたい
□投稿者/ N -(2018/05/10(Thu) 10:41:14)
    No87313 (shu さん) に返信
    > ■No87307 (N さん) に返信
    >
    >>教えてくださったもので色々と調べてみたのですが、VB初心者であるため分かりませんでした…。
    >>申し訳ありませんが、何かヒントとなるような例文を教えて頂けないでしょうか?
    >
    > VisibleClipBoundsを使用するとして
    >
    > Dim g = e.Graphics
    > g.PageUnit = GraphicsUnit.Millimeter
    > Dim bd = g.VisibleClipBounds
    > Dim x1 = bd.Left
    > Dim x2 = x1 + 10.0!
    > Dim y = bd.Top + bd.Height / 2.0!
    >
    > このような感じで座標を取得するとよいかと思います。


    座標取得することができました。
    本当にありがとうございました。


記事No.87296 のレス / END /過去ログ150より / 関連記事表示
削除チェック/

■91923  Re[7]: Microsoft EdgeのWEB保存方法
□投稿者/ 竹 -(2019/08/10(Sat) 06:48:27)
    No91871 (Azulean さん) に返信

    >>Edgeはなんのために生まれたのでしょうか。

    > そういった話はこちらのページなどをお読みになると良いでしょう。
    > https://blogs.msdn.microsoft.com/osamum/2015/08/07/edge-iewindows-10-web-12395/


    ありがとうございます。
    そうですか。。。。

    新しい技術とか書かれていますが、メリットが実感できませんね。
    それどころか、自前のディスクに保存する機能さえない。。。

    このような開発は、残業代狙いか、会社(MS)によるリストラされる防止策かな。。。
記事No.91814 のレス / END /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -