デスクトップイメージを高画質でファイル化する方法

このQ&Aのポイント
  • デスクトップのフルスクリーンイメージをクリップボードに取り込んでファイル化する方法を紹介します
  • デスクトップイメージをファイル化する際、PNGフォーマットが最も画質が良いことがわかりました
  • VBでデスクトップイメージを高画質でファイル化することは可能です
回答を見る
  • ベストアンサー

デスクトップイメージを高画質でファイル化したい

(1) デスクトップのフルスクリーンイメージを「Print Screen」でクリップボードに取り込んで、 System.Drawing.Image として宣言した変数に My.Computer.Clipboard.GetImage() で格納し、 System.Drawing.Imaging.ImageFormat.Png System.Drawing.Imaging.ImageFormat.Jpeg System.Drawing.Imaging.ImageFormat.Bmp でファイル化しました。 (2) 同じデスクトップのフルスクリーンイメージを ペイント、ワード(解像度デフォルト)、GIMPに取り込んでファイル化したデータと比較したところ、 PNGファイル以外は程度の差はあるが、何れも(1)の方が画質が悪かったです。 質問ですが、 VBでデスクトップイメージを高画質でファイル化できないでしょうか?

noname#229451
noname#229451

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MSDNライブラリに品質レベルを指定するSaveメソッドの説明がありますが、試されましたか? https://msdn.microsoft.com/ja-jp/library/ytz20d80(v=vs.110).aspx

参考URL:
https://msdn.microsoft.com/ja-jp/library/ytz20d80(v=vs.110).aspx
noname#229451
質問者

お礼

有難うございました、何分手探りでコーディングしている状態ですので、その記事は知りませんでした。早速コードを作り直します。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

ここへ質問する前に Googleででも「PrintScreen 画像 高画質」で照会するほうが早いと思う。 その初めに出てくる、5つほどの記事を読んでから、必要あれば、さらに詳しく質問したらどうです。 画像ファイル形式の画像圧縮の問題を頭において。

noname#229451
質問者

補足

その検索では取込みソフトの紹介やBMPを使え的な回答になりますね。 当方が知りたいのはVBでの解決方法ですが。

関連するQ&A

  • C#の保存フォーマット指定

    C♯のプログラムで 保存、読み込みにおいてbmp以外にjpgとgifを指定しないといけないのですが、 >saveFileDialog1.Filter =のあとの“イメージ(*.bmp)…には追加したのですが、 >そのあとの System.Drawing.Imaging.ImageFormat.Bmp: の部分を変えないといけないのですが、そこが分からなくて詰まっています! 誰か教えてください! お願いします

  • C#でのpngからbmpへの変換について

    プログラミングの初心者です。 現在、以下の点について困っています。 現在業務で画像ファイルをpngからbmpに変換するプログラムを作成しています。 以下のようなソースで対象のファイルを変換してみたのですが、変換後の画像ファイルをアドビのフォトショで開こうとすると読み込みに失敗します。 ※usingでDrawing.Imagingは宣言済み Bitmap bmp = new Bitmap("failename.png"); bmp.Save("failname.bmp", ImageFormat.Bmp); bmp.Dispose(); 念のため、ペイントで適当な画像を作成して同様の処理をしてみたところ、そちらは上手く変換できたようで、フォトショでも普通に開けることが出来ました。 対象の画像ファイルは、変換前ではちゃんとフォトショで開けることが出来ます。 フォトショでもちゃんと読み込めるファイルを作成するには、まだソースが足りないのでしょうか? 知っている方がおられましたら、アドバイスをお願いします。

  • 【VB.NET】画面のコピー(その2)

    度々質問して恐縮です。 先刻同じタイトルで質問した結果、Web上から下記の参考プログラムを見つけることができました。 しかし、次の要求を実現するにはどのようにしてよいのか分かりません。 分かる方がいらっしゃいましたらお教えして頂きたく、お願い申し上げます。 【質問】 (1)以下のプログラムを実行して「Button1」をクリックすると、「Form」のみがjpegファイルとして保存される。これをデスクトップ全体(デスクトップ上で開かれている他のソフトのウィンドウ類を含む。つまり、ディスプレイの表示そのもの)をjpegファイルに保存したい。 (2)同一ファイル名で保存使用とした場合、上書きするか否かの警告を出したい(以下のプログラムでは"c:\screen.jpg"に固定されていますが、ファイル名とディレクトリを変えられるようにする予定)。 ----------以下、参考にしたコード---------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' [Alt]キー+[Print Screen]キーの送信 SendKeys.SendWait("%{PRTSC}") ' クリップボードに格納された画像の取得 Dim data As IDataObject = Clipboard.GetDataObject() If Data.GetDataPresent(DataFormats.Bitmap) = True Then Dim bmp As Bitmap = CType(data.GetData(DataFormats.Bitmap), Bitmap) ' 取得した画像の保存 bmp.Save("c:\screen.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) End If End Sub ----------参考にしたコードは以上----------

  • VB.netでのPictuerBoxに描写した内容の保存について。

    VB.netでのPictuerBoxに描写した内容の保存について。 PictureBoxに描写した内容を保存してみると、描写した項目事態は正しく保存されているのですが、背景が真っ黒になってしまいますこれは、なぜなのでしょうか? ソースは以下の様な感じです。 Dim bmp As Bitmap Dim g As Graphics bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height) PictureBox1.Image = bmp g = Graphics.FromImage(PictureBox1.Image) g.DrawLine(Pens.AliceBlue, 0, 10, 20, 10) PictureBox1.Refresh() PictureBox1.Image.Save("test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) どなたかわかる方よろしくお願いいたします。

  • VB.NETでのPictureBoxによる画像保存について

    またお世話になります。 VB.NETでプログラムでPictureBoxに絵を描かせているのですが、そこまでは表示させることができました。このできた画像をBitmapなりjpegなりに保存させて、ほかの画像ビューワ等でも見れる形にしたいのですがうまくいきません。 ちなみに今はこのように書いて、 Dim gra1 As Graphics = PictureBox1.CreateGraphics FileOpen(2, myfile2, OpenMode.Output) (絵を描かせるプログラム) PictureBox1.Image.Save(myfile2, System.Drawing.Imaging.ImageFormat.Bmp) FileClose(2) としてまわしたところ、 System.Runtime.InteropServices.ExternalException' のハンドルされていない例外が system.drawing.dll で発生しました。 追加情報 : GDI+ で一般的なエラーが発生しました。 といわれました。 どなたかご教授いただけたらお願いしますm(__)m

  • bmp→png→bmpで画質は落ちますか?

    本をスキャナーでとりこんで(モノクロ)画像ファイルとして管理しています。 bmpで保存しているのですが、ご存知のように容量が膨大になってしまいます。 pngに変換すると10分の1くらいになりますので、全部pngに変換しようと思っています。 pngは可逆変換なので、bmp→png→bmpで画質は落ちないと解釈してよろしいのでしょうか。 pngに変換した画像を印刷して変換前のbmpと比較したところ目に見える違いは認められませんでした。 よろしくお願いします。

  • C#(Windows Form)で作る電子印鑑

    C#で電子印鑑を作っています。 前提として、私はプログラマーではありません。過去に大学の講義でCを受けており、コードの理解はできます。趣味程度でVisualStudio 2022とAIチャットを駆使して作っています。Framework 4.8.1 ChatGPTで限界を感じたので、ここで質問させていただきます。 ※ひたすらChatGPTで質問した後なので、補足がくどい場合があります。ご承知おきください。 ※質問内のコードが有効な方法かは知りません。普通はやらないコードも使ってるかもしれません。藁にも縋る思いです。すでにpng・メタファイル・ChatGPT・Geminiと格闘し続けて3週間以上です 一通りコードを書き終え、白背景で印影をAdobe ReaderのPDF(以下、単純に「PDF」と書きます)にCtrl+Vで貼り付けるところまで実装できました。BMP形式なので割とすんなりでした。もともとある画像を読み込んでいるのではなく、描画はすべてDrawLineやDrawEllipseで実施しています。 この白背景は、ラジオボタンで背景透過画像と切り替えできるようにしています。背景透過画像が肝心です。 今、実装できていないのが、この背景透過画像をPDFにCtrl+Vで貼り付ける動作です。 PDFに背景透過画像を貼り付けるコードにできますでしょうか?拡張メタファイル形式でコピーできれば貼り付けられると思うのですが… 下にも書きますが、Office系には背景透過画像の貼り付けが成功しています。 今のコードが以下です。if文内なので、usingでくくってます。ボタンクリックでクリップボードコピーです。 名前空間 using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Drawing.Text; using System.Globalization; using System.IO; using System.Linq; using System.Security.Cryptography.X509Certificates; using System.Windows.Forms; using System.Runtime.InteropServices; if文分岐内 using (Bitmap bmp = new Bitmap(diameter, diameter, PixelFormat.Format32bppArgb)){ using(Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); DrawGraphics(g, h, x, y); (DrawGraphicsメソッドですべての描画を実施) } bmp.Save(ms, ImageFormat.Png); System.Windows.Forms.IDataObject dataObject = new DataObject(); dataObject.SetData("png", true, ms); Clipboard.SetDataObject(dataObject, true); bmp.Dispose(); ms.Dispose(); } } 透過画像なので、ImageFormatsやSetDataは"png"で指定しています。このまま実行すると、Office系のソフトには正常に透過画像が貼り付けられますが、貼り付け先がPDFだと貼り付けができません。ただし、Office系に貼り付けたあとの背景透過画像をそのままCtrl+Cでコピーし、PDFにCtrl+Vするとなぜか正常に貼り付けられます。Office系でコピーした時点で拡張メタファイルか何かに変換されているのでしょう… そもそも最初のbmpの時点で透過情報消えるやないか、と思っていましたが、Bitmapクラスは透過情報が保持できる?ようです。 そのため、C#のコード内でOffice系に貼り付け後のコピーの動作(おそらくpng→emf変換)を実装しようとしたのですが、 ImageFormats.Emf/SetData("emf")や、 ChatGPTにて ①png→メタファイル ②png→バイト列→メタファイル ③png→bmp→メタファイル(bmpの時点で透過情報が死ぬので不採用ですが、ChatGPTから提案され続けました。) など、すべて不発に終わりました。 ImageFormats.Emf/SetData("emf")、これに関しては、 コード内のbmp.Save(ms, ImageFormat.Emf);これの時点で、すでに変換に失敗しているようです。wmfにしてもダメでした(デバッグ開始でボタンを押すとnullが返ってくる) ラスター画像なので描画自体は少し汚いですが、WPFだと拡張メタファイルやクリップボードをうまく扱えませんでした… コピーの様子をみるためにWPFは途中まで書きましたが、メタファイルの扱いがうまくいきませんでした。私の知識がないだけかもしれませんが、有力な情報もヒットしません… その他情報必要な場合は追加しますので、よろしくお願いいたします。 アプリケーションの使用先OSはWin10/11です。

  • 【C#】ラバーバンドでのドラッグ矩形範囲の画像切抜

    現在C#にて画像を表示してラバーバンドで選択した範囲のみを切り抜いて画像ファイルとして保存する。 というツールを製作しているのですが、ラバーバンドの表示やピクチャボックス全体の画像ファイルの保存はできたのですが選択範囲のみを切り抜いて保存すると言う処理が私にはかけません。。 どなたか助けてはいただけないでしょうか? public partial class Form1 : Form { private int _xi, _yi, _xc, _yc; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //OpenFileDialogクラスのインスタンスを作成 OpenFileDialog ofd = new OpenFileDialog(); //はじめのファイル名を指定する ofd.FileName = ""; //はじめに表示されるフォルダを指定する ofd.InitialDirectory = @"C:\"; //[ファイルの種類]に表示される選択肢を指定する ofd.Filter = "TIFFファイル(*.tif;*.tiff)|*.tif;*.tiff|JPEGファイル(*.jpg;*.jpeg)|*.jpg;*.jpeg|PNGファイル(*.png)|*.png|ビットマップ(*.bmp)|*.bmp|すべてのファイル(*.*)|*.*"; //[ファイルの種類]ではじめに //「TIFFファイル」が選択されているようにする ofd.FilterIndex = 1; //タイトルを設定する ofd.Title = "開くファイルを選択してください"; //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする ofd.RestoreDirectory = true; //ダイアログを表示する if (ofd.ShowDialog() == DialogResult.OK) { //OKボタンがクリックされたとき //画像の大きさをPictureBoxに合わせる pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; //PictureBox1に選択した画像を表示する pictureBox1.ImageLocation = ofd.FileName; } } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; _xi = _xc = e.X; _yi = _yc = e.Y; pictureBox1.Invalidate(); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; _xc = e.X; _yc = e.Y; pictureBox1.Invalidate(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { if(_xc == _xi && _yc == _yi) return; int x, y, w, h; if(_xc < _xi) { x = _xc; w = _xi - _xc; } else { x = _xi; w = _xc - _xi; } if(_yc < _yi) { y = _yc; h = _yi - _yc; } else { y = _yi; h = _yc - _yi; } e.Graphics.DrawRectangle(Pens.Black, x, y, w, h); } private void button2_Click(object sender, EventArgs e) { //SaveFileDialogクラスのインスタンスを作成 SaveFileDialog sfd = new SaveFileDialog(); // フィルターの設定 sfd.Filter = "TIFF形式|*.tif|GIF形式|*.gif|JPEG形式|*.jpeg|PNG形式|*.png|すべてのファイル(*.*)|*.*"; // ファイル保存ダイアログを表示 sfd.ShowDialog(); String extension = System.IO.Path.GetExtension(sfd.FileName); switch (extension.ToUpper()) { case ".TIF": // PictureBoxのイメージをTIFF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Tiff); break; case ".GIF": // PictureBoxのイメージをGIF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Gif); break; case ".JPEG": // PictureBoxのイメージをJPEG形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); break; case ".PNG": // PictureBoxのイメージをGIF形式で保存する pictureBox1.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Png); break; } }

  • 画質が反映されない?

    FLASH初心者ですm(_ _)m 現在、PNGファイルでコマアニメを作成し、それをムービークリップ にして表示させようとしているのですが・・・ メインムービーを1フレームだけにして、配置したムービークリップ の中でアニメさせているときには、画質を「中」以上にしておけば PNG画像(ムービークリップ)を拡大縮小しても画像はスムージング 処理され、綺麗に表示されるんです。 しかし、メインムービーのフレームを1つでも増やしてしまうと、 途端にPNG画像が低画質と同じガタガタな表示になってしまうんです。 画質を「品質優先」にしても効きません(;w;) メインムービーは、本当にただ空のフレームを増やしただけで、一切 手は加えてません。 これはマシンの性能のせいなのでしょうか?また、どんなにフレーム レートを落としてでも最高画質を維持するのが「品質優先」ではない のでしょうか?? もし説明がわかりにくいようでしたら補足いたします。 どなたか解決法、あるいはFLASHの仕様など解る方いらっしゃいませ んでしょうか・・・。

  • 添付ファイルはファイルでなければならないのか?

    作ったイメージデータをファイルに落とし ------------(1) そのファイルを添付ファイルとして送信しています ----(2) Bitmap MyImage = new Bitmap(300, 300); Graphics g = Graphics.FromImage(MyImage); ここから g に色々書込みます MyImage.Save(@"MyImage.bmp", ImageFormat.Bmp); ----(1) System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(); smtp.Host = "smtp.MyMail.com"; string MailSubject = ""; string MailBody = ""; MailMessage oMsg = new MailMessage("MyMail○○○@MyMail.com", "MyFreind□□□@FreindMail.com", MailSubject, MailBody); oMsg.Attachments.Add(new Attachment(@"MyImage.bmp")); ----(2) smtp.Send(oMsg); //メール送信 ご覧の通りイメージをファイルに書き出す目的は添付ファイル化する為だけです ファイルに落とさずにイメージを送信することは可能でしょうか? ⇒ある特殊な理由によりイメージをファイルとして一瞬たりとも存在させたくないのです

専門家に質問してみよう