C#で画像のクリップボードへのコピーと貼り付け方法
- C#のGraphicsオブジェクトのDrawImageメソッドを使って画像を表示させる方法について説明します。
- クリップボードへの画像のコピーと貼り付けをするためには、Clipboard.SetDataObject()メソッドを使用します。
- 具体的な使用方法については、以下のソースコードをご参考ください。
- ベストアンサー
C#で画像をクリップボードへのコピーと貼り付けについて
GraphicsオブジェクトのDrawImageメソッドを使って画像を表示させています。 この画像をクリップボードへコピーしてほかのところに貼り付けしたいのですが、クリップボードへはClipboard.SetDataObject()を使用すればよいと思っています。 しかし、どのように使ったらいいのかよくわかりません。現在のソースは以下のようになっています。 //Bitmapオブジェクトの作成(画像ファイルを読み込む) Bitmap bmap = new Bitmap(@"C:\test2.bmp"); //元の画像からの切り取り範囲の指定 RectangleF rectSrc = new RectangleF (pointX,pointY,WidthX,WidthY); //貼り付け先を指定範囲の指定 RectangleF rectDst = new RectangleF(0, 0, DstX,DstY); //PictureBox1のGraphicsオブジェクトの作成 Graphics g= pictureBox1.CreateGraphics(); //画像の描画 g.DrawImage(bmap, rectDst,rectSrc,GraphicsUnit.Pixel); //クリップボードへのコピー Clipboard.SetDataObject(g); よろしくおねがいいたします。
- ryota0117
- お礼率53% (24/45)
- C・C++・C#
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Bitmap bmp = new Bitmap("C:\\test2.bmp"); RectangleF rectDst = new RectangleF(0, 0, bmp.Width ,bmp.Height); Clipboard.SetDataObject( bmp.Clone(rectDst, bmp.PixelFormat) , true); // Clipboard.SetDataObject(bmp,true);
関連するQ&A
- C++/CLIを用いて画像をクリップボードにコピー
VC++でC++/CLIでアプリケーションを作成しています。 そこで,pictureBox1の画像を,クリップボードにコピーしたいのですが,方法が分からず困っています。 Clipboard::SetDataObject(); の () の中に何を渡せばいいのでしょうか?
- ベストアンサー
- C・C++・C#
- VB.NET ピクチャーボックスのImageの一部をクリップボードにコピー
Picturebox1.Image = New Bitmap(Picturebox1.Width, Picturebox1.Height) Dim g As Graphics = Graphics.FromImage(Picturebox1.Image) これ以降 g.DrawLine 等で描画を行っています そして、ピクチャーボックスの一部の領域(矩形)を指定して クリップボードにコピーしたいのですがどうしたらいいでしょうか よろしくお願いします 他のピクチャーボックスにその一部をコピーできるだけでもいいのですが
- 締切済み
- Visual Basic
- C# Picturebox 縮小・拡大時の表示方法
下記のようなコードで、画像の拡大・縮小を行っています。 ただ画像の縮小時、PictureBox内の余分な部分について、(1)縮小前の 画像が残像のように表示されています。 また通常、画像の拡大・縮小前の画像では画像サイズがPictureBoxよりも大きいサイズの 場合、スクロールバーを表示するようにしています。 (2)でも、画像拡大時、スクロールバーが出るには出ているのですが、画像全てを 確認できません。 (1)、(2)の問題について、解決方法をご存知の方、お願いです、、、教えてください。。。 かなり、困ってます。。。。 Bitmap img = new Bitmap(pictureBox1.Image.Tag.ToString()); //PictureBox1のGraphicsオブジェクトの作成 Graphics g = pictureBox1.CreateGraphics(); //拡大・もしくは縮小 RectangleF rect = new RectangleF(0, 0, zoom * img.Width, zoom * img.Height); g.DrawImage(img, rect); //BitmapとGraphicsオブジェクトを破棄 img.Dispose(); g.Dispose();
- 締切済み
- Visual Basic
- (VB.net)画像の一部を切り取って,拡大・縮小したい
内容を見ていただき,ありがとうございます。 タイトルのままですが,PictureBoxに画像を出して,その一部を切り取ったうえで拡大・縮小させるプログラムを作成しています。 今のところ,画像の一部を切り出すことはできたのですが,これを拡大・縮小させる方法をご存じないでしょうか。画像の一部を切り出すソースは以下のとおりです。 まず,フォームにピクチャボックス(PictureBox1)とコマンドボタン(Button1)を配置し,ソリューションを置いているフォルダ内のbinフォルダにWinter.jpg(WinXPのマイピクチャに入っているものです)を入れておきます。次に,Button1のコードとして,以下のものを打ち込みました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Bitmapオブジェクトの作成(切り取り元画像の指定) Dim bmap = New Bitmap("winter.jpg") '切り取る範囲をRectanleで指定 Dim rect As New Rectangle(10, 20, 100, 200) 'PictureBox1のGraphicsオブジェクトの作成 Dim g As Graphics = PictureBox1.CreateGraphics() '元の画像の指定部分を切り取ってPictureboxの左上隅(x,y = 0,0)に表示する.単位はピクセル. g.DrawImage(bmap, 0, 0, rect, GraphicsUnit.Pixel) 'Graphicsオブジェクトを破棄 g.Dispose() End Sub 以上です。 おそらく,DrawImageの部分を変えればいけるのではないかと思われるのですが,いかがでしょうか。ご助言よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- VB2005でクリップボードにコピー
VB2005でPicture1のイメージをクリップボードにコピーし Picture2.imageにペーストすると Picture2の画面がすべてブルーになつてしまいます。 プログラムはサンプル(microsoft Document explorerから)をダウンロードしべつのプログラムに貼り付けただけなのですが。 'ピクチャをピクチャ ボックスからクリップボードにコピーします My.Computer.Clipboard.SetImage(PictureBox1.Image) 'クリップボードにイメージが存在する場合、そのイメージをピクチャ ボックスに貼り付けます If My.Computer.Clipboard.ContainsImage Then PictureBox2.Image = My.Computer.Clipboard.GetImage Else MsgBox("Clipboard does not contain an image", MsgBoxStyle.Exclamation And MsgBoxStyle.OKOnly) End If
- ベストアンサー
- Visual Basic
- C#でフォームのコピーをしたい
最近C#を始めたのですが、フォームをコピーする際に Bitmap myBmp = new Bitmap(this.Width, this.Height); this.DrawToBitmap(myBmp, new Rectangle(0, 0, this.Width, this.Height)); Clipboard.SetDataObject(myBmp, false); といった風にコピーをしていたのですが、これではフォーム全体がコピーされ、縁ができてしまいます。範囲指定してフォームコピーをする方法はないでしょうか。
- ベストアンサー
- C・C++・C#
- クリップボードからの貼り付けのフック
VB.net、C#、.net framework2005で、 クリップボード拡張ソフトを開発しております。 クリップボードへの入出力が起こる直前にフックをかけたいです。 コピー・切り取り操作(ClipBoardへの入力)については クリップボードチェーンに自分を加え、WM_DRAWCLIPBOARDをハンドルすることで解決できました。 貼り付け(ClipBoardからの出力)についてはどのようにすれば実現できますでしょうか? 貼り付けイベントが起こった時に、チェーン内のプログラムにそれを通知するようなWindowsメッセージがあるかと思い、それらしいものを探してみたのですが、利用できそうなものがありませんでした… 具体的には、 ・入力時に、データを加工して仮想クリップボードに格納 ・出力時に、仮想クリップボード内のデータを再度加工して出力(貼り付け) という処理を実現したいです。 宜しくお願い致します。
- 締切済み
- Visual Basic
- クリップボードの中身を判別
PHPなどは理解しておりますが、VBに関してはまったく素人で何もわからないものです。 今回、クリップボードの中身を常に監視して、ある文字列が含まれていたらそのまま、それ以外の文字列の場合は空にするアプリが必要になりました。 そこでネットでいろいろ探して次のように作りました。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'クリップボードの文字列データを取得する Dim ClipBoardValue As IDataObject Dim ClipBoardString As String Dim okng As Boolean Do 'クリップボードのデータを取得() ClipBoardValue = Clipboard.GetDataObject ClipBoardString = ClipBoardValue.GetData(DataFormats.Text).ToString okng = ClipBoardString.Contains("反応あり") If (okng) Then 'クリップボードに文字列をコピーする Clipboard.SetDataObject("反応あり") Else Clipboard.SetDataObject("") End If Loop End Sub End Class 一つのフォームにボタンを一つ設置し、起動したら監視開始、ボタンをクリックしたら終了という形にしています。 動作させると、以下の問題があります。 ・どんな文字をコピーしてもすぐ空になってしまう ・フォームが表示されない ・起動時にクリップボードの中身が空だとエラーが表示される (オブジェクトのインスタンスにはnewを使用しろとかなんとか。。。) 正しい動作をするコードを教えていただけないでしょうか。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 【C#】GraphicsのhDcについて
C#でアプリケーションを作成しています。 PictureBoxに読み込んだ画像を画像処理ライブラリにGraphicsのhDcを渡し、処理をさせたいのですが、 Bitmap bmp = new Bitmap("ファイル名"); pictureBox1.Image = bmp; Graphics g = Graphics.fromImage(pictureBox1.Image); IntPtr hdc = g.GetHdc(); というふうに作った[hdc]を渡すと真っ黒な画像が表示されてしまいます。 ピクチャーボックス1のPaintイベント pictureBox1_Paint(object sender, PaintEventArgs e) { // pictureBox1.Imageには上と同じ画像を読み込み済み IntPtr hdc = e.Graphics.GetHdc(); } というふうに作った[hdc]を渡すと、正常に処理された画像が表示されます。 質問なのですが、PictureBox1.Imageから作ったGraphicsとPaintEventArgs.Graphicsはどのような差があるのでしょうか? また、PaintEventArgsを使わず同じようなGraphicsを作るにはどうしたらいいでしょうか? 至らない説明で申し訳ありませんが、ご助言をよろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- クリップボード画像転送方法
こんにちは、VB6.0にてクリップボード画像転送方法について質問 させて頂きたく書き込みいたしました。 Printscreenキーを押してクリップボードへ画像を転送したまでは 良いのですが、その画像をPictureBoxを扱わずにBitblt等で操作 いたしたいのですが方法は御座いますでしょうか? どうかよろしくお願いいたします
- 締切済み
- Visual Basic
お礼
ありがとうございました。参考になりました。