アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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処理

この回答への補足

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

補足日時:2002/02/28 17:57
    • good
    • 0

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/
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/19 20:49

内部で使われてる拡大縮小機能は、近くにある色と同じ色を使うだけなので、とても見られたものではありません。


画像データを配列として得て、ちゃんとした演算をしなければならないでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/19 20:40

こんばんは♪



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

参考URL:http://www.vector.co.jp/soft/win95/art/se131666. …

この回答への補足

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

補足日時:2002/02/19 20:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!