• 締切済み

画像の縮小をすると粗くなってしまいます

640×480pixelのピクチャボックスに ビットマップファイルを読み込み print メソッドで文字を出力してから 120×120pixelのピクチャボックスに StretchBlt を使用して縮小表示していますが、 画像が粗くなり文字が読み取れなくなって困っています。 すっきりきれいに縮小表示する方法があれば教えてください。 よろしくお願いします。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

Private Declare Function SetStretchBltMode Lib "gdi32" _       (ByVal hdc As Long, ByVal nStretchMode As Long) As Long Private Const COLORONCOLOR = 3    SetStretchBltMode Printer.hdc, COLORONCOLOR  '←これを追加    StretchBlt hoge,hoge・・・           '←既存のStretchBlt処理

holly-tree
質問者

補足

SetStretchBltModeで「COLORONCOLOR」に設定してみましたが 他の値(1,2,4)に設定したときとそんなに変わりませんでした。 やっぱり自前で作成するしかないんでしょうか。

  • sssohei
  • ベストアンサー率33% (33/98)
回答No.3

StretchBlt は非常に単純な実装なので、綺麗にしたければ、自前で書かないといけなかったと思います。 # DLLやActiveXなんかも公開されている方がおられると思います。 >きれいに縮小表示 ネット上にも色々解説があります。 余裕がないので、概要だけ書くと、 縮小後の各点のピクセルは、その点に対応する縮小前のピクセルの領域の平均とします。 # もちろん、ピクセル全体が含まれないときはその比率を考慮します。 例えば、 12345678 の幅を5(ABCDE)にするのであれば このとき、各A~Fは A = (1*1.0 + 2*0.4    )/1.4 = 1.285714 B = (2*0.6 + 3*0.8    )/1.4 = 2.571429 C = (3*0.2 + 4*1.0 + 5*0.2)/1.4 = 4.0 D = (6*0.8 + 7*0.6    )/1.4 = 6.428571 E = (7*0.4 + 8*1.0    )/1.4 = 7.714286 ∴ 13468の様になります。(整数部が奇数なら四捨五入、偶数なら五捨六入(?)でしたっけ? API使ったりしないと遅いので、詳しくは、VB関係のページを探してみてください^^; 書籍であれば、「VisualBasic 画像処理プログラミング2D編」(ソフトバンク)という本などに詳しいことが書かれています。高いのですが、、、 最近すっかりVBをご無沙汰しているので、良いページを紹介出来ません^^; 本題とは違うのですが、参考になりそうなページのURLを書いておきます。

参考URL:
http://www06.u-page.so-net.ne.jp/qc4/shige-3p/
holly-tree
質問者

お礼

画像関係の知識不足なので、レスの内容も難しーって感じなのですが・・・。 高い本は買えないので(^^;)もう少しネットで調べてみようと思います。 余裕がないとか言いながらすごくいっぱい書いていただきましてありがとうございました。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

内部で使われてる拡大縮小機能は、近くにある色と同じ色を使うだけなので、とても見られたものではありません。 画像データを配列として得て、ちゃんとした演算をしなければならないでしょう。

holly-tree
質問者

お礼

うーん。私って、初心者には難しいことをしようとしていたんですね。 今まで画像処理関係はしたことなくって。 もう少し勉強してみます。 回答ありがとうございました。

noname#5746
noname#5746
回答No.1

こんばんは♪ プログラミング > Visual Basicについては全くの素人なので的外れなアドバイスかもしれません。 縮小するためのソフト(画像拡縮)を使うのはどうなのでしょうか(^^ゞ

参考URL:
http://www.vector.co.jp/soft/win95/art/se131666.html
holly-tree
質問者

補足

URL見てみましたが私がしたいのはプログラム内での縮小なのでちょっと違うかったかも。 でも、素早いレスありがとうございました。 初投稿だったのでうれしかったです。

関連するQ&A

  • PictureBoxの画像の表示方法を教えて VB.NET

    VB.NET2003環境なのですが、 ピクチャーボックスに画像を表示したいのですが、 下記のようなことはできるでしょうか? ピクチャーボックスの大きさ640*240で固定 画像ファイル640*480 だった場合に、画像を縮小して、横長のピクチャーボックスの 中央に(左右に余白をつける)画像ファイルを表示したいです。 ピクチャーボックス自体の大きさを変える方法などは分かったのですが、 表示前にファイルの画像のサイズを小さくして、位置を指定して 表示する方法がわからないので、このようなことができましたら、 方法をご教示頂きたいです。 よろしくお願い致します。

  • VisualBasic 6.0でのプラグラムなのですが、

    VisualBasic 6.0でのプラグラムなのですが、 ピクチャボックス内にPrintメソッドで文字を描画し、ピクチャボックスごと画像として印刷しているのですが、 文字の縁のガタガタが目立ちます。 このような印刷方法でも滑らかにする方法はないでしょうか?

  • ドリームウィーバーで画像を縮小

    すいません。ドリームウィーバーCSを使っているのですが、 CSSを使った部分でちょっと分からないことがあります。 divで囲って、幅250ピクセルに指定したとします。 そこへ幅500ピクセル、縦1000ピクセルを入れて、自動的に画像を縮小させたりする事は できるのでしょうか? 事前に何かのソフトで画像を縮小してから放り込めば解決なのですが、大量の画像があるため 画像を加工に非常に時間がかかります。 いろいろCSSのボックスなどの設定を試してはいるのですが、上手くいきません。 私が行いたいのは、上記のサイズのdivで、画像を入れると横幅は50%になりますよね? その後自動的に縦幅も50%となり、画像が歪むことなく、縮小した画像が表示できたら良いと 考えています。 実際は画像の半分だけ表示されスクロールバーが付いたりします。(このあたりはオーバーフロー設定で変わりますが・・) もし上記が可能ならやり方を教えてもらえると助かります。

    • 締切済み
    • CSS
  • 画像の表示について

    1.imageボックスを用いた場合、pictureプロパティで画像を参照した後Stretch=Trueにするとそのimageの大きさに合わせて画像を縮小して表示してくれます。   pictureボックスのときはその大きさに合わせて画像を縮小して表示できません。AutoSize=tureにしても画像の大きさにpictureボックスが大きくなってしまうだけです。 pictureボックスにはそのような縮小機能はないのでしょうか? 指定する画像を縮小して保存し直すしかないのでしょうか? そうすると表示したい大きさに合わせるのが大変で・・・。 2.ひとつのフォーム上に与えられた変数によって 画像を表示したいと考えています。 私たちが習ったのは 1. まずpictureボックスを1つ用意する。 2. 表示したい枚数だけimageボックスを準備しその中に画像をpictureプロパティで指定する。(画像5枚につきimageボックス5つ) 3. textボックスに数字をいれcommandボタンをおす。 4. その値によって picture1.piture=image1.picture という具合で表示させる。 こうなると表示したい画像が10枚あればimageボックスが 10個必要になりますよね。 そうなるとフォーム上がごちゃごちゃなってしまいます。 そうしないように画像をアドレスを指定して直接いれることはできませんか? image1.picture="gazou1.bmp"(エラーでした・・・。)みたいな感じで・・・。 そうするとimageボックスを1つしか作らなくてよいのですっきりするのですが。 以上2つよろしくお願いします。

  • 画像ファイルの「縮小表示」が出ない。

    1 OSはWINDOWS 7 2 画像の入っているホルダ(例えばピクチャ)を開くと 3 それぞれの画像ファイル名とその内容画像が縮小表示   されるはずですが表示されません。(中アイコン以上にすれば)   WINDOWS XPでの「縮小版」のように。 4 どかの設定で表示されるようになるのでしょうか?

  • 画像の縮小

    ピクチャー画像の縮小を行いたいのですが、 sw = Picture1.ScaleWidth * 0.1 sh = Picture1.ScaleHeight * 0.1 w = Picture1.Width h = Picture1.Height Picture2.Height = h * 0.1 - Picture2.Height - Picture2.ScaleHeight Picture2.Width = w * 0.1 - Picture2.Width- Picture2.ScaleWidth Picture2.PaintPicture Picture1.Picture,0,0,sw,sh のようなプログラムを行うと、画面で見えている範囲のピクチャーは縮小してくれるのですが、VB画面からはみ出る部分は切れてしまいます。 ピクチャーを1つずつ、とって縮小していくとなると相当な時間がかかってしまうので、早く処理できる方法は無いでしょうか? ご存知の方は教えて下さい。

  • 画像ファイルの縮小表示がでない

    画像ファイルの「縮小表示」が出ない。 1 OSはWINDOWS VISTA 2 画像の入っているホルダ(例えばピクチャ)を開くと 3 それぞれの画像ファイル名とその内容画像が縮小表示   されるはずですが表示されません。 4 どかの設定で表示されるようになるのでしょうか? WINDOWS7の場合、 1 画像の入っているホルダを開く 2 整理 3 ホルダーと検索オプション 4表示タブ  5「常にアイコンを表示、縮小版は表示しない」のチェックを外す で解決したのですが、今回はチェックがはずれているにもかかわらず表示しない。

  • PhotoshopCS3でJPEG画像をできるだけ高画質で縮小するには?

    PhotoshopCS3(WinXP)でデジカメ画像(JPEG,72dpi)を、画像縮小ソフトより 高画質で縮小する方法があれば教えて下さい。 元画像「1920×1080Pixel」を「600×338Pixel」に縮小してから拡大表示すると どのソフトでもあきらかに画像が粗くなるのがわかります。 PhotoshopCS3より優れてるといわれてる「縮小専用。」や「藤-Resizer」等で 「白い紙に印刷された取扱説明書を撮影した画像」で画質比較してる最中です。 PhotoshopCS3の「画像の再サンプル」の全てのモードで比較したところ 「バイキュービック法」(縮小に最適)がベストかと思いましたが、 文字がやや粗くなり、一方(滑らかなグラデーションに最適)だと、 やや、ぼやけ気味になり、黒い文字がグレー気味になります。 むしろ「バイリニア法」の方がトータル的に良い位です。 お気に入りは「縮小専用。」の「画像くっきり(精鋭化)30~50%」で 画質の劣化が少ないです。(その他のチェックはオフ,JPEG量子化率100%) 縮小後のファイルサイズは1MB以下ならOKなので、PhotoshopCS3でも問題なく 「縮小専用。」より画質の劣化が少ない方法を模索してます。 PhotoshopCS3にこだわる理由は、画像処理を同一ソフトで行いたいからです。 私と同じようなQ&Aが見つかりましたが、具体的手法がわかりません(>_<;) http://oshiete1.goo.ne.jp/qa3691364.html 解像度の変更で「画像の再サンプルのチェックをはずせばOK」とありますが、 チェックを外して解像度は変更できるものの、ピクセルの幅と高さは 1920×1080のままで、縮小ができません。 例えば、解像度を350dpi等に変更し、なおかつ600×338ピクセルに縮小して 画質劣化が上記ソフトより少ない方法であれば、具体的な手法を教えて下さい。

  • 画像の縮小

    画像の縮小 パソコン初心者です。 今マイピクチャにプリントスクリーンで取ってきて ペイントで保存した 画像が4つあります。 それを4つまとめて1枚の紙に印刷したいのですが 1つの大きさは1/4より大きいので 試したところ少し切れてしまいました。 なんとか画像を縮小して 4枚ともきれいに納める方法はありますか?

  • 画像が加工(縮小)できません

    マイクロソフトピクチャーマネージャーで画像を小さくしたいのですが、加工したあとに上書き保存をしようとすると、「いくつかのファイルを保存できませんでした もう一度ファイルを保存してください」とでてきて、対応の仕方がわかりません。私のパソコンにはほかに画像のピクセルを小さくするプログラムがないのでなんとかしたいのですが、お願いいたします。