aoiorenji
@aoiorenji

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

C# 画像処理

プログラミング初心者です。
C#を使ってコードを書いているのですが詰まってしまってどうしようもありません。
助けていただきたいです。

★やりたいこと
pictureboxの上部の左右2点を固定して底辺のみ上下左右に自由に動かしたいです。
イメージとしては、鉄棒に両手で捕まってゆらゆら足を動かす感じです。
マウスポインターに底辺が追従する形で作成したいのですが、そもそもこのような処理は、C#では可能なのでしょうか?
ネットでいろいろ調べてみたのですがヒットするものがなくて困ってます。

よろしくお願い致します。

0

2Answer

お望みの物は探しても見つかりませんでしたが、
このあたりチャプター読み進めていくと参考になるかもしれません。

1Like

Comments

  1. @aoiorenji

    Questioner

    ありがとうございます!!
    記載していただいた記事のchapter3-1からが元もていたものに非常に近いです!
    後は、この記事を参考にして正方形がそのまま拡大縮小するのではなく動かしたときに平行四辺形にも動かせるようにいろいろ試してみたいと思います。
    感謝します。

プロジェクトの種類、フレームワークのバージョンを記載してください。
WPFを使えば、多分そこまで難しくはない筈ですが。

https://qiita.com/LemonLeaf/items/4c5e957df4d39ddc911b

Windowsフォームらしいので、それ用の簡単なサンプルを追記。

using System.Drawing;
using System.IO;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private Image _BmpCanvas;
    private Image _BmpImage;

    public Form1()
    {
        InitializeComponent();

        _BmpCanvas = new Bitmap(pictureBox1.Width, pictureBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        using (var g = Graphics.FromImage(_BmpCanvas))
        {
            g.Clear(Color.White);
        }
        _BmpImage = new Bitmap(new MemoryStream(File.ReadAllBytes(@"c:\test\1.png")));

        pictureBox1.Image = _BmpCanvas;
        this.pictureBox1.MouseMove += new MouseEventHandler(this.PictureBox1_MouseMove);
    }

    private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        using (var g = Graphics.FromImage(_BmpCanvas))
        {
            g.Clear(Color.White);

            //変形用の平行四辺形の座標を指定し描画
            var img = _BmpImage;
            g.DrawImage(
                img,
                new [] {
                    new PointF(0, 0),                    
                    new PointF(img.Width, 0),
                    new PointF(e.Location.X - (img.Width / 2), e.Location.Y)
                }
            );
        }

        // PictureBox再描画
        pictureBox1.Invalidate();
    }
}

1Like

Comments

  1. @aoiorenji

    Questioner

    コメントありがとうございます。
    情報少なくて申し訳ありません。
    プロジェクトは、Windowsフォームアプリ(.NET Framework)で4.7.2のバージョンを使用してます。記載していただいた記事に似たようなことは、cursor.positionを使ってマウスポインターに追従できるようにできたのですが、全体を動かすのではなく上辺を固定してそのほかを自由に動かしたいです。
  2. Windowsフォーム用の簡単なサンプルソースを追記しました。
  3. @aoiorenji

    Questioner

    お世話になります!
    コメントありがとうございます!
    とても参考になります!まさに求めていたものです。
    bitmapでpictureboxに画像生成してmousemoveイベントでbitmapを動的にするまではわかるのですが、//変形用の平行四辺形座標を指定し描画 からの理屈がよくわかっていませんが、自分なりにひも解いてコードに組み込んでいきたいと思います。
    とても助かります。ありがとうございます!!

  4. もし解決されたのであれば、質問をクローズしてください。
    あと、質問のタグは、きちんと設定しないと検索に引っかからないので注意したほうがいいです。C#,.NET,ASP.NET,Rasor は滅茶苦茶です。
    (そもそも質問見た感じ、ASP.NETもRazorも関係ないし…)
    Windowsフォームアプリだと、WinForms タグが一般的だと思います。
  5. @aoiorenji

    Questioner

    ありがとうございます。
    初心者なことに甘えてタグなどよくわからないままに質問してしまいました。
    申し訳ありません。以後気をつけます。

Your answer might help someone💌