画像縮小の効率的な方法とは?

このQ&Aのポイント
  • 画面で見えている範囲のピクチャー画像を縮小する方法を探しています。
  • 現在の方法ではVB画面からはみ出る部分が切れてしまうため、効率的な処理方法を知りたいです。
  • ピクチャー画像を1つずつ縮小するのには時間がかかるため、処理の高速化について教えてください。
回答を見る
  • ベストアンサー

画像の縮小

ピクチャー画像の縮小を行いたいのですが、 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つずつ、とって縮小していくとなると相当な時間がかかってしまうので、早く処理できる方法は無いでしょうか? ご存知の方は教えて下さい。

  • o_teu
  • お礼率77% (37/48)

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

  • ベストアンサー
  • hawkwind
  • ベストアンサー率34% (160/469)
回答No.1

基本的なことをお尋ねしますがpictureとimageの違いは分かっていますか? いったんimageにおとして、それを加工すれば問題ないかと思います。

o_teu
質問者

お礼

hawkwindさん、早速の回答有難うございます。 「Imageにおとす」という方法で、無事解決しました。 後の処理で、スケールなどの問題も気になっていたのですが、それも無事解決しました。 有難うございました。

関連するQ&A

  • 画像の90度回転表示の処理時間を短縮したい

    今、PictureBox に読み込んだ画像を90度回転して別の PictureBox に表示していますが、処理にとても時間がかかっています。(480×640ピクセルを右90度変換するのに約3.5秒) もっと処理が早くなる方法があれば教えてください。よろしくお願いします。 ---現在の処理(Picture1 → Picture2)--- Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long Dim p1sw  As Long  'Picture1.ScaleWidth Dim p1sh  As Long  'Picture1.ScaleHeight Dim x1    As Long Dim y1    As Long Dim c    As Long  'カラーコード Dim hDC1  As Long  'Picture1.hDC Dim hDC2  As Long  'Picture2.hDC Dim X    As Long Dim Y    As Long '縦横サイズを逆転する With Picture1   p1sw = .ScaleWidth   p1sh = .ScaleHeight   hDC1 = .hdc End With With Picture2   .Height = Picture1.Width   .Width = Picture1.Height   hDC2 = .hdc End With p1sw = p1sw - 1 p1sh = p1sh - 1 'ピクチャを90度回転 For X = 0 To p1sw         'Picture1のX座標   y1 = X   For Y = 0 To p1sh       'Picture1のY座標     x1 = p1sh - Y     c = GetPixel(hDC1, X, Y) 'カラー情報の取得     '取得したカラーを指定位置に設定する     If c <> -1 Then Call SetPixelV(hDC2, x1, y1, c)   Next Y Next X # OSはWindows95、VB6.0(SP5)を使用しています。

  • フォームにビットマップを表示

    PaintPicture LoadPicture("c:winnt\winnt.bmp"), _ 0, _ 0, _ ScaleWidth, _ ScaleHeight   とかけば最大化で表示はするのですが   画面のプロパティで背景を指定するときに表示位置の   並べて表示みたいにしたいのですがどうすればできますでしょうか   また、そのときに1つ1つのおおきさのしていもできるのですか   教えてください。   よろしくお願いします。

  • VB6.0での画像縮小版表示

    VB6.0での画像縮小版表示 こんにちは エクスプローラでファイル一覧表示するとき画像ファイルの縮小版表示が出来ます。 これと同じようなことをVB6.0で行おうとしました。 例えばファイルが10個あったら10個並べて表示します。 Imageを使いサイズを調整して出来ました。 しかし、問題がありました。メモリーを大量に消費します。 このためメモリーの少ないPCだと極端に遅くなります。 エクスプローラで縮小版表示すると遅くないです。 ということは良い方法があるのではないか、自分のやり方が悪いのではないかと思います。 良い方法を教えていただけませんか。 今のやり方 MotoH = ImgSum(Cunt).Height MotoW = ImgSum(Cunt).Width ImgSum(Cunt).Picture = LoadPicture("Fileのフルパス名") Hsize = ImgSum(Cunt).Height Wsize = ImgSum(Cunt).Width SyukusyaH = MotoH / Hsize SyukusyaW = MotoW / Wsize If SyukusyaH < SyukusyaW Then Syukusya = SyukusyaH Else Syukusya = SyukusyaW End If ImgSum(Cunt).Height = Hsize * Syukusya mgSum(Cunt).Width = Wsize * Syukusya ImgSum(Cunt).Stretch = True 要は読み込んだ画像を用意したイメージのサイズに合わせて表示しています。 よろしくお願いいたします。

  • visual studio 2008 professional edi

    visual studio 2008 professional edition でvisual basic6のプログラムを開く際に 1.バージョン 2.フォームのプロパティ 3.コントロールのプロパティ が書かれている部分で 「宣言が必要です」というエラーが出るのですが対処法が分かりません。 どなたか教えていただけないでしょうか? VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 9510 ClientLeft = 390 ClientTop = 660 ClientWidth = 11100 LinkTopic = "Form1" ScaleHeight = 9510 ScaleWidth = 11100 Begin VB.Frame Frame10 Caption = "cfs number" Height = 1335 Left = 6600 TabIndex = 117 Top = 9840 Width = 1455 ........ と続きます。

  • インターネット上の画像を縮小して載せる方法は?

    いつもお世話になっています。 インターネット上に画面の大きさくらいのgifファイルがあります。 それをwidth="??" height="??"で縮小して、自分のHPに載せようとしています。 # 著作権の問題は大丈夫です。 ただ、縮小するとかなり見た目がボロボロになります。 そこで、何か良い方法は無いでしょうか? このファイルをコピーしてこないで実現したいと思っています。 みなさん、よろしくお願いします。

  • 画像縮小プログラムが、最初に読み込んだ時(再読み込みしない場合)動きません。

    今javascriptを使って、縦横比を固定したまま画像を縮小するプログラムを作っています。 ソースコードは function keep_max() { for (i in document.images) { if (document.images[i].className == 'small_sale_thumb') { max_width = 100 ; max_height = 110 ; }else { continue; } if ( document.images[i].height > max_height) { now_width = document.images[i].width; now_height = document.images[i].height; factor = max_height/now_height; document.images[i].height = max_height ; document.images[i].width = now_width * factor; } } } それで、このようにして画像を表示しようとします。 <img width="100" class="small_sale_thumb" src="http://hogehoge.co.jp/bc11/u3785993.jpg" /> <script type='text/javascript'> keep_max(); </script> このようにして、他のドメインのサイト(楽天など)の画像を読み込み、 縮小して表示しようとしているのですが、最初に読み込んだ場合、このプログラムが作動しません。 しかも何故か、二回目に読み込んだ場合(同じページを再読み込みした場合等)作動します。 これはいったいどういうことでしょうか? ちなみに今妥協策として、bodyのonloadタグにもこれを仕込んでいますが、この場合、画像表示から縮小までにタイムラグがあります。 このプログラムを上手く動かす方法or他のクライアントサイドでの縮小の仕方はありませんでしょうか?? ちなみに縮小したい画像の件数が多いので、負荷対策のためGD等のサーバーサイドでの縮小は考えないようにしています。

  • LoadPictureしたイメージデータのサイズを知りたい

    VB6で作成したプログラムにおいて、サイズが異なるイメージデータをLoadPictureでImageに一旦読込み、PaintPictureで同じPictureBoxに拡大して転送したいのですが、PaintPictureで全データを転送するにはイメージデータのサイズがわからないと全データが転送できません。 LoadPictureでImageに読込んだ場合に、データのサイズ(Width・Heightまたはデータ量)を確認する方法を教えてください。

  • VB6でのPicutre印刷について

    現在、Windows7にてクリップボードの印刷を考えています 困っている事 PictureオブジェクトからHeight,Widthを取得できない 動き (1)クリップボードをPictureオブジェクトに複写 (2)上記PictureオブジェクトからHeight,Widthを取得できない(1ページに印刷するため) ※ここでエラーになります (3)print.paintPictureにて印刷 希望→同一実行ファイルにて、Windows2000も動作できる 何かヒントをお願いします

  • ブラウザに合わせる拡大・縮小する背景画像について

    よろしくお願い致します。 親swfの中にあるmc.bgに外部swfを表示しています。 このmc.bgはブラウザに合わせて拡大・縮小できるように、下記のス クリプトをメインフレームに入れています。 外部swfのひとつに、画像が100%で表示されてから少しづつ拡大して 次の画像へ切り替わるというスライドショーのswfがあるのですが、 (画像が表示・拡大する部分はモーショントゥイーンで制作しています) このswfを親swfに読み込んで表示しているときにブラウザをリサイズすると、外部swfがブラウザに合わなくなり、画像(外部awf)がmc.bgより小 さく表示されてしまいます。 (ブラウザのリサイズをしなければ問題ありませんでした) 外部swfの画像の拡大・縮小に関わらず、常にブラウザに合わせて拡大・ 縮小できるようにするにはどうすればよいのでしょうか? 色々検索したのですが、該当するものがありませんでした。 ほとほと困っております。どうぞよろしくお願い致します。 ※フレームに挿入しているスクリプトです。 ----- R = Stage.height/Stage.width; Stage.scaleMode = "noScale"; Stage.align = "LT"; function bgScale() { w = Stage.width; h = Stage.height; if (w*R>h) { bg._width = w; bg._yscale = bg._xscale; } else { bg._height = h; bg._xscale = bg._yscale; } bg._x = w/2; bg._y = h/2; menuMC._x = w-20; menuMC._y = h-20; } sListener = new Object(); sListener.onResize = function() { bgScale(); }; -----

  • VB 6.0 PictureBox のプロパティに存在したScaleHeight ScaleWidthは.netには存在しない?

    VB .netにてPictureBox コントロールを使用して ライン描画を行なおうとしています。 VB 6.0の時には存在していたScaleHeigth,ScaleWidthのプロパティは.netには存在していないみたいですが何か変わるものは用意されていないでしょうか? 実際の表示幅(Height,Width)ではなくScaleHeigth,ScaleWidthを使用して細かいライン描画をしたいのですが、どなたか方法をご存知の方がいましたらよろしくお願いいたします。

専門家に質問してみよう