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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラ

添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラーしか出た事がないのですが

Aベストアンサー

他の回答者様の記入通り、拡張子が無い事には判断出来ません。
また、クリックしてもエラーとありますが、webから探すとか出ませんか?
憶測ですが、多分質問者様のPCにこのファイルを開くアプリケーションが
インストールされていないのではないかな?って思います。
参考までに
よくありがちなのは、XPで作ったエクセルファイル等(逆だったかな^^;)を
ビスタのPCで見ると似たようなアイコンになります。
オフィスの互換パックをインストールすると見れます。

Qドラッグを用いての拡大/縮小 ピクチャボックスについて

QNo.2999555の続きの質問です。元の質問のコピーと共に質問します。

>VB6.0により、プログラムの実行後、フォームウィンドウの端(角)を>ドラッグすることにより、(ボタンやボックスを含め)全体を拡大,縮
>小させることはできますでしょうか?
>フォームウィンドウの端からのドラッグはデフォルトでも出来るので
>すが、フォームウィンドウのみが拡大,縮小されてしまい,ボタンやボ>ックスは元の大きさのままになってしまいます。

この質問については、Form_resize イベントに
Public Sub Form_Resize_Ctl(KmForm As Object, _
OrgSize As ReSize_Tag)
Dim ParH As Double ' 縦比率
Dim ParW As Double ' 横比率
Dim KmControl As Control ' フォームのコントロール
Dim OrgFont As Double ' フォントサイズ退避
ElseIf TypeOf KmControl Is Line Then ' Line
.X1 = .X1 * ParW
.X2 = .X2 * ParW
.Y1 = .Y1 * ParH
.Y2 = .Y2 * ParH
ElseIf TypeOf KmControl Is PictureBox Then ' PictureBox
.FontSize = .FontSize * ParW
Select Case .Align
Case 0 '
.Top = .Top * ParH
.Left = .Left * ParW
.Height = .Height * ParH
.Width = .Width * ParW
                       …
等と拡大・縮小処理を記述し、解決したかと思ったのですが、
プログラム実行以前からのラインはしっかり拡大・縮小されるのですが、
実行後にピクチャボックス内に描画したラインは指定した座標に描かれたまま、周りのコントロールや文字のみが拡大・縮小されてしまいました。ラインの描画は折れ線グラフとして用いているのですが、
描画したラインのみがその場にそのままの大きさで留まってしまいます。
プログラム実行後に描画したラインも拡大・縮小は可能でしょうか?

ご教授、お願いします。

QNo.2999555の続きの質問です。元の質問のコピーと共に質問します。

>VB6.0により、プログラムの実行後、フォームウィンドウの端(角)を>ドラッグすることにより、(ボタンやボックスを含め)全体を拡大,縮
>小させることはできますでしょうか?
>フォームウィンドウの端からのドラッグはデフォルトでも出来るので
>すが、フォームウィンドウのみが拡大,縮小されてしまい,ボタンやボ>ックスは元の大きさのままになってしまいます。

この質問については、Form_resize イベントに
Public Sub Form_Resize...続きを読む

Aベストアンサー

参考URLにサンプルが載っていますのでご覧になってみてください。

参考URL:http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Image/

Q右クリで画像保存が出ない!

画像を取りたくて矢印を画像に置くと!手のマークに代わり!右クリができなくなりました。
どうしたらよいのでしょうか?

Aベストアンサー

最近のサイトでは著作権の問題もあり、勝手に保存ができないように右クリックができないように設定しいるところが多くなっているであります。法律に抵触する場合もあるであります。

方法としては、色々あるでありますが、ただ見えてる画像が欲しいのであれば、プリントスクリーンでPC画面全体をコピーして、ペイントソフトにペースト、余分な部分を削除して保存すればいいと思うであります。

プリントスクリーンはググってほしいであります。

Qピクチャボックスの使用方法

ピクチャボックスをピクセルモードに変更して、Width=2000位にしてLineとprintで描画をしています。
lineは0から2000まで線が引けるのですが、printで文字を書こうとすると、どうやら0から1000までしか書けないようなのです。
これは仕様なのでしょか? それともどこか設定を間違えているのでしょうか?

どうか教えてください・・・

Aベストアンサー

おそらくグラフをスクロールさせる件ですよね?
PictureBoxのAutoRedrawはTrueになっていますか?
普通問題なくできるはずです。

Form1.Picture1.AutoRedraw = True

AutoRedrawを有効にしておかないと
表示部分(1024)を超えた部分を自動で再描写してくれないので

Q 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思

 友近さんの画像を探しています。本当にいい人で、美人で、セクシーだと思います。着衣・水着・スカート、なんでもOKです(あまり小さいサイズじゃない方がよいです)。どうぞよろしくお願いします。

Aベストアンサー

こちらに数点ありました。
http://bsearch.goo.ne.jp/image.php?UI=web&TAB=web&STYPE=0&CC=1&SCRDEF=0&IMGST=0&IMGSZ=0&IMGC=3&IMGFT=0&IMGFT=1&IMGFT=2&IMGFT=3&MOVPT=0&MOVFT=0&MOVFT=1&MOVFT=2&MOVFT=3&AUDPT=0&NSDP=1&KWDP=1&DC=20&FR=1&SM=mc&OCR=1&SITE=&SITE2=&SITE3=&SITE4=&SITE5=&SITEH=&AUDST=0&AUDMST=0&MOVTHN=0&QGR=1&MOVSC=0&NOJSB=0&QGA=1&NOJS=0&AUDSITE=0&MT=%CD%A7%B6%E1&button=%B2%E8%C1%FC%B8%A1%BA%F7
画像を使用される場合は自己責任でお願いします。

Qピクチャボックスの座標取得

Microsoft Visual Studio 2008のスマートデバイス用で、PDA用のプログラミングを開発しています。

フォーム上にピクチャボックスを貼りつけ、画像表示をできるようにしています
で、やりたいことは・・

Private Sub PictureBox1_MouseUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PictureBox1.MouseUp

'ピクチャボックスの座標を表示させる  

  End Sub

Private pos As Pointで宣言しておき、
pos.X = e.X
pos.Y = e.Y
でやると、どうも、フォームの座標が取得されてしまうようです
ピクチャの画像は拡大・縮小をできるようにしてあるため、フォーム座標=ピクチャ座標にはなりません

ピクチャボックスの座標を取得するにはどのようにしたらよいのか、ご教授願います

Microsoft Visual Studio 2008のスマートデバイス用で、PDA用のプログラミングを開発しています。

フォーム上にピクチャボックスを貼りつけ、画像表示をできるようにしています
で、やりたいことは・・

Private Sub PictureBox1_MouseUp(ByVal sender As Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles PictureBox1.MouseUp

'ピクチャボックスの座標を表示させる  

  End Sub

Priv...続きを読む

Aベストアンサー

PictureBoxのSizeModeをStretchImageに設定されているのでしたら

dim img as Image = PictureBox1.Image
pos.X = e.X * img.Width / PictureBox1.Width
pos.Y = e.Y * img.Height / PictureBox1.Height

といった具合にスケーリングしてみてください

#1の回答はForm座標からコントロール座標への変換の仕方です

Q●「美人アプリ」の画像を保存したい!

●「美人アプリ」というアプリを使用しています。

●ここで表示される画像を保存したいのですが、方法がわかりません。可能かどうかも。。

●もし、方法をご存知の方がいらっしゃいましたら教えていただけませんか?おねがいします。

Aベストアンサー

保存したい画像を表示させて、↓の方法で画面をキャプチャすると、写真アルバムから見れます。
http://blog.livedoor.jp/sakusakupocky/archives/50263981.html

Qピクチャボックス。指定位置への文字表示

Picture1.Circle (AA!, AB!), CircleSizeVal&, LineColorVal&
で描いた円の付近に、文字、例えば「点1」と表示したいのですが
位置(座標)の指定方法がわかりません。指定方法、又は、検索語をお教えください。

Font 指定で文字により横幅が変化するものしか見つけられませんでした。
DOS のように横幅が一定の Font がありませんか。

Aベストアンサー

お世話になります。

> 文字、例えば「点1」と表示したい
System.Drawing.Graphics のインスタンスを
取得して、DrawString メソッドを呼び出す、
でしょうか。

> DOS のように横幅が一定の Font がありませんか。
等幅フォントで検索してみてはいかがでしょう。

Q右クリ禁止のサイトの画像を保存

質問の通りなのですが右クリック禁止のサイトの画像を保存できるようにする方法はないでしょうか?あと、よく海外でおもしろ動画とかを見せてるサイトがありますが、そういった動画を保存する方法はありますか?重ねて質問すいません^^;

Aベストアンサー

そのサイトを見ないとなんとも言えませんが、
JAVAをオフにしてみると右クリック禁止がはずれる事もあります。

それで駄目ならば、プリントスクリーンを取って画像を修正してください。
まぁ画像を持ち出されたくないサイトならばあまり持ち出さないほうがよろしいかと思います。

ちなみに動画を保存する場合は専用のソフトなどが必要。

Qピクチャボックスで一部の文字を回転

初歩的な質問かもしれませんが・・・

ピクチャボックス内に描画をしようとしているのですが,
縦軸のタイトルを90度回転させて表示させることはできるでしょうか。

ちなみにそこ以外は普通に横書きなので,
Picture1.Print "経過時間"
のように書いています。

文字列単位でプロパティを変更する方法がわからない状態です。。
わかる方がいましたらよろしくお願いします。

Aベストアンサー

> 縦軸のタイトルを90度回転させて表示させることはできるでしょうか。
> Picture1.Print "経過時間"

VB6とかでしょうか?
VBの標準機能ではできませんが、Win32APIを使えば可能です。

「How To Print Text Sideways in a Picture Box Using Win32 API」
(http://support.microsoft.com/kb/154515/en-us)

#上記サンプルの、角度と表示位置を調整してください。


人気Q&Aランキング