• ベストアンサー
  • 困ってます

画像読み込みによる起動時間の改善

まずは環境を、Win2000、VB6SP6です。 とあるアプリを作っていまして そのアプリの起動時間が長いんです exeをダブルクリックで起動させると CPU100%になり数秒(PCスペックで変化)硬直したあと 問題なくアプリが起動します。 これの原因はわかっていてそれは画像の読み込みに時間がかかっているのです。 画像無しで起動させると一瞬で起動します。 またVB内で画像のあるフォームを読み込むときも同じぐらい時間がかかります。 画像はJPGで10数個あり、それぞれの解像度が大体 150x2000~150x10000以上の画像です。 容量はアプリ含め1.2MBぐらいです。 これは数百個あるアイコン画像をジャンルわけし そのジャンルごとに横に数珠繋ぎのようにしているためです。 どうにかして解決する方法はあるでしょうか? つなげてある画像をひとつひとつ個別に切ったほうがいいのでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数160
  • ありがとう数5

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

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

質問者さんが書かれた「画像の数だけFormを作成する」以外の方法がないかと考えてみたのですが、どうにも思いつきませんでした。 それにその方法、そんなに悪い思いつきじゃないと思いますよ。ソースファイルが増えてしまうのは管理が面倒ですけど、画像読み込みの部分はそうそう頻繁に編集するものでもなさそうですし。 うまくTagプロパティを使えば、多数のFormをプログラム上でまとめて管理できると思います。Formをすべて数え上げて(Formsを使う)、その中でTagプロパティに特定の文字列が入っているFormのみを順次LoadしながらDoEventsする、という感じでしょうか。(単純にLoadとDoEventsを並べるのも悪くありません。シンプルイズベストです。)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご賛同ありがとうございます。 そうですね、ソースが増えますけど各々のフォーム自体に何か書くわけでもないので それほどの負担にはならなさそうですのでこの方法でいこうかと思います。 いろいろアドバイス諸々ありがとうございました。

関連するQ&A

  • 印刷のクオリティ

    VB6より、PDFにて印刷物を作成するのですがアイコンが荒くて使い物になりません。 Printer.PaintPicture LoadPicture(jpgファイル),x1,y1,width,height でjpgファイルを指定します。jpgファイルはかなり解像度を上げています。それでも、このVBの命令だとあまりきれいではありません。 何かきれいになる方法はないでしょうか?

  • Windows画像とFAXビューア より軽く、多重起動(複数画像閲覧)できるソフト教えてください

    画像をダブルクリックすると、Windows付属の、”Windows画像とFAXビューア” が起動しますが、他の画像をダブルクリックすると以前の画像が消えてしまいます。 ・フリー ・軽い ・複数枚見れる(画像ごとにアプリが起動) のような条件を満たすソフトがあれば教えてください。 Vixは便利ですが2,3枚程度を見るには重過ぎました。

  • 画像の取り込みなんですが

    VB最近始めたばかりです。 起動してあるウインドウの全体をjpgなどの画像として取込み、それを保存したいのですが、どうやればいいのかさっぱりわかりません。  わかりずらい質問の仕方かもしれませんが、もしわかる方がいれば教えてください。お願いします

その他の回答 (3)

  • 回答No.3

残念ながら、「フォームを表示する」という1つの動作を複数のステップに分割して、その途中でDoEventsを実行することはできませんので、まず画像なしでフォームを表示し、それから画像を順次読み込むということになります。 試しにこんなプログラムを作ってみました。 [ form1.frm ] Pictureを20個貼り付けました。それぞれのPictureは150x8000の画像をあらかじめPictureプロパティで割り当ててあります。 [ form2.frm ] Pictureを20個貼り付け、それをコントロール配列Picture1(0)~Picture1(19)にしてあります。また、以下のプログラムコードを入れてあります。("c:\tmp\150x8k.jpg"はform1.frmで使ったのと同じ、150x8000の画像です。) Private Sub Form_Load()   Show   For i = 0 To 19     Picture1(i).Picture = LoadPicture("c:\tmp\150x8k.jpg")     DoEvents   Next End Sub [ form3.frm ] ボタンを2つ(Command1とCommand2)配置し、以下のプログラムコードを入れてあります。 Private Sub Command1_Click()   Form1.Show End Sub Private Sub Command2_Click()   Form2.Show End Sub スタートアップフォームをform3.frmにすると、起動時にform3にある2つのボタン(Command1とCommand2)が表示されます。 Command1を押すとform1.frmが、Command2を押すとform2.frmが表示されます。 form1.frmは、ボタンを押してから表示されるまで1秒以上かかります。 form2.frmは、ボタンを押すとすぐに表示されます。ただし、フォームが表示されてから、フォーム内の画像が全部表示されるまでは、少し時間がかかります。 質問者さんが実際に使用しているのがPictureかどうか分かりませんが、同じ考え方が使えると思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>残念ながら、~~ やはりそれはできないですよね、ありがとうございます。 実際やるとなると外部ファイルとして一つ一つ画像を読み込むときに DoEventsを挿むしかないと・・・ それだと読み込みも早いと・・・うーん 外部ファイルにしておくとユーザが自由に参照できるので それは避けたいんですが、そう都合よくはできないですね。 ※実際に画像を入れたのはPictureBoxです、書き忘れてすみません。 完全に無駄な方法ですが思いついたので一応書いときます。 ・まず読み込む画像の数だけFormを作ります ・それにPictruBoxを置き画像を入れておきます ・起動時に順次フォームを読み込み、そのときにDoEventsを挿み起動メッセージなどを表示する。 というのです。 xcrOSgS2wYさんのサンプルや上記のことなどを参考に作っていこうかと思います。 いろいろご検討していただいてありがとうございます。 ※もし上記の考えにレスいただけるならありがたいです。  1、2日程度で回答締め切ります。

  • 回答No.2

こちらでもP4-2.8GHzの環境で試してみました。やはり同じくらい時間がかかりますね。 さて解決方法ですが、大きく分けて2通り考えられます。 (1) 一度に読み込む量を減らす 一度に読み込む量を減らすとは、例えばアイコンを全部バラバラ(あるいは数個ずつ)に切って、そのうち必要な部分だけをその都度読み込むというものです。プログラムの改変とデータの作り直しが楽であれば、それほど悪い選択肢ではありません。 データの内容が変わるだけでプログラムの構造的にはそれほど変わらないので(都度読み込む部分が増えるくらい)、具体的な部分は省略します。(必要でしたら回答にコメントしてください。) (2) 今と同じように最初に全部読み込むが、読み込み中も操作できるようにする 最初に必要とする読み込み時間自体は変わりませんが、読み込み中も「硬直」しないような工夫をする方法です。 VB6のプログラムでは、長い時間がかかる処理の途中にDoEventsを入れないと硬直してしまい。今回のプログラムでは、最初の画像読み込みが数秒かかり、その間にDoEventsがないので硬直してしまっているわけです。 テスト環境では20個程度の画像を読み込む時間が2秒程度ですので、1個あたり0.1秒ほどで読み込むことができる計算になります。ということは、1個画像を読み込むごとにDoEventsを実行すれば、ユーザ操作に対する反応は遅くとも0.1秒で得られるということになり、数秒の硬直と比較すればはるかに操作性が良くなります。 ただし、画像を読み込み切らないうちにフォームを表示してしまうことになりますから、「画像入りのフォームは画像を読み込み終わるまで表示しない」か「画像入りのフォームが画像を読み込み終わらないうちに表示していたら、読み込み終わった時点で表示内容を更新する」か、いずれかの処理が必要になります。後者の場合は「ここにはまだ画像を表示していない」ということがユーザに分かるような工夫も欲しいですね。例えば原色(青とか赤とか緑とか)の塗りつぶしが表示される等。 こんな感じでヒントになるでしょうか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

わざわざご検討までしていただいてありがとうございます。 (1) 一度に読み込む量を減らす これは画像を個別に外部ファイルにしておき、必要に応じて逐次読み込むということですね。 しかし画像を触られたくないのでこれはちょっと出来そうに無いです。 (2) 今と同じように最初に全部読み込むが、読み込み中も操作できるようにする ご回答をいただいたあと、この方法をしばらく試していたのですがやり方が思いつきませんでした。 それらしくは出来たのですが・・・ ---------------------------------------- Private Sub Form_Load() Call iniLoad Call Form1.Move(fMainX, fMainY) Form1.Show Form1.Enabled = False DoEvents ~省略(起動メッセージetc)~ Call Load(Form2) DoEvents Form1.Enabled = True End Sub ---------------------------------------- Form1がメインフォーム、Form2が問題の画像があるサブフォームです。 起動時にメインフォームだけが表示され、 必要に応じてサブフォームを表示させます。 さらにメインとサブは常に連動しております。 メインフォームで簡単編集、サブフォームで詳細編集といった感じです。 片方を変更すればもう片方もそれに連動する形です。 (サブ)フォームに内蔵している画像を 「1個画像を読み込むごとにDoEventsを実行」することは出来るのでしょうか? これなら一つ読み込むごとに起動メッセージなどを表示させれば ユーザはすべての画像を読み込むまで視覚的にわかるのでストレスが少なくなると思います。 よろしければその方法のサンプル、または記載されているサイトのURLなどよろしくお願いします。 長文失礼いたします。

  • 回答No.1

もしかしたら、ですが、JPEG圧縮を展開する部分で時間がかかっているのかもしれません。JPEGのかわりにBMPにすれば起動が速くようであれば、これが原因と分かります。 仮にこれが原因だとすれば、JPEGのかわりにBMPにしてしまえばいいわけですが・・・ファイルサイズ的に許容できないとすればちょっと困りますね。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます。 xcrOSgS2wYさんのアドバイスを実施してみると、 おっしゃる通りの様で起動時間が短くなりました。 今使っているPCは元々開発してるPCとは違うのですが P4-2.8GHzでの起動時間が大体 BMP:0.8~0.9秒 JPG(画質100%):1.5~1.6秒 JPG(画質80%):1.5~1.6秒 GIF(256色):2.4~2.5秒 となりました。(プログラム内で起動時間を計りました) 容量は、BMP:32MB、JPG(100):3.6MB、JPG(80):2.5MB、GIF(256):4.7MBとなりました。 起動時間はファイルの画質(圧縮率)ではなくファイル形式によるもののようです・・・ う~ん、何か解決法は無いでしょうか・・・

関連するQ&A

  • PowerPointに貼り付けた画像の解像度について

    PowerPointに挿入した画像の解像度についてお聞きします。バージョンは、2000またはXPについて想定しています。 通常の方法で、jpgなどの画像を「挿入」「図」「ファイルから」で挿入します。挿入後、その画像を編集したい場合、この画像を選択しコピー、PhotoShopなどに貼り付けを行うと、72dpiに変更されています。 質問1.画像によっては、左ダブルクリックで、PhotoShopが起動します。どこかで設定した記憶は無いのですが、何をもって、PhotoShopが起動するのか、あるいは、オブジェクトの書式設定の画面がでるのか、基準が不明です。教えてください。なお、この場合でもPhotoShopでの解像度は72dpiに変更されています。 質問2.コピー、貼り付けによる方法は上述のように、72dpiに解像度が変更されますが、実際に、紙などにプリントすると、72dpiではないように思います。つまり、オリジナルの解像度を保持しているように思います。何らかの方法で、この解像度を保持したまま、PhotoShopで画像編集することは可能でしょうか?いったん、PDFなどに変更する方法は確かにうまくいくことは確認していますが、たくさんあるので、お聞きします。 高解像度の画像をたくさん貼り付けると、ファイルのサイズが大きくなることから、PowerPoint内での解像度はオリジナルのままではないかと想像します。いったん、貼り付けた画像をもとのままの解像度で編集しなおしたいというのが、最終的な希望なのですが、何かよい方法はないでしょうか。 よろしくお願いします。

  • ヤフオクで出品すると画像が荒くなってしまう

    少し前にも質問させて頂いたのですが、より詳細に記載させて頂きます。 出品した画像が荒くなってしまうので原因を探っております。 出品はスマートホンでヤフオクのアプリを使っております。 デジタルカメラで撮影して出品しているのですが、どうしても画像が暗くなってしまうため画像加工のアプリを使って露光を変更して出品しております。 (撮影した時点) ファイル形式 jpg サイズ 2.69MB 解像度 3776×2520 (露光を変更した時点) ファイル形式 jpg サイズ 1.11MB 解像度 2520×3776 この画像を600×600以内になるようにサイズを変更し、3枚で3MBになるようにして出品しています。 (1)画像が荒くなってしまうのはなぜなのでしょうか? (2)アプリで出品しているのが原因なのでしょうか?ブラウザで出品すればもっと綺麗になるのでしょうか? 素人質問でお恥ずかしいのですが、皆さんのお知恵を貸して下さい。 よろしくお願い致します。

  • JPEG画像表示ソフトのWindowsVista標準ソフトへの戻し方

    はじめまして。WindowsVistaに、デジカメ付属の画像 表示ソフトをインストールしたら、JPGファイルの起動がすべて そのインストールしたソフトに置き換わってしまい、既定のプログラム からJPGファイルを「Windowsフォトギャラリー」に戻したのですが、画像をダブルクリックすると、フォトギャラリーが起動し、 、起動したJPG画像は表示されず、サムネイル画像のウィンドウが 表示されてしまいます。 Windows標準設定では、既定のプログラムも「Windowsフォトギャラリー」になっているのですが、画像をダブルクリックすると サムネイルは表示されず、起動した画像のみ表示されるので、その設定にもどしたいのですが、どなたか戻し方が分かる方がいればご教示いただけないでしょうか?宜しくお願いいたします。

  • 特定のフォルダから画像を検索する際に、解像度などで検索する方法はないで

    特定のフォルダから画像を検索する際に、解像度などで検索する方法はないでしょうか? 1920x1080の解像度(ピクセル数?)を持つ画像のみを検索する。 あるいは解像度別に画像ファイルをソート(並び替え)する。 Finderから、こういった検索ができれば嬉しいのですが、どうやらできないようです。 こういった検索をできる方法や、アプリをご存知の方がおられましたら、 どうかご教示をよろしくお願いいたします。

    • ベストアンサー
    • Mac
  • Windowsフォトギャラリーが起動しない

    Vistaマシンです。 CD-Rに複数の画像を保存するために、Windowsフォトギャラリーを使用したいと思い、 スタート→すべてのプログラム→Windowsフォトギャラリーのクリック の操作をしましたが、フォトギャラリーが起動しません。 ただ、JPG画像のダブルクリックでは起動しますが、当然サムネイル表示ではありません。 よろしくお願いします。

  • 画像をwindowsフォトビューアーで開きたい

    hp製のwindows7を使っています。 jpg画像をダブルクリックすると、hp標準のビューアーが開いてしまいます。 windowsフォトビューアーを使うにはいちいち【jpg画像を右クリック→プレビュー】を押さなければいけません。 ダブルクリックでwindowsフォトビューアーのプレビューにいくようにするにはどうすればいいでしょうか…? hpのビューアーは起動が遅い上に重く、表示されるプレビューも非常に使い辛くて困っています。 色々調べてみましたが、windowsフォトビューアーの不具合(画像が表示されない等)に関する情報しか得られませんでしたので、画像ダブルクリックでwindowsフォトビューアーで開けるようにする方法をご存知の方、どうかお知恵をお貸しください。 宜しくお願い致します。

  • 起動するたびに画面が大きくなって、、

    起動すると、まずユーザー名・パスワードを入れるウィンドウが現れますがそれが画面の半分ぐらいを占めています。WindowsXpが立ち上がると右下バルーンが開いてディスプレイの設定(コンピュータの画面の解像度と表示色は低く設定されています)と出てきます。 その後、画面のプロパティで解像度と表示色を直せば普通に見えるようになるのですが、起動するたびに同じ設定に戻ってしまいます。 (起動時には画面の色が8ビットになっています) システムの復元は切っていた時になってしまったので直せません。 変なアプリが悪さしてるのかもわかりませんが、どれが原因かわかりません。 どなたかOS再インストール以外の方法で直し方教えてください。お願いします。 ちなみに、 Sotec winbook3100xp windowsxp home edition 画面の解像度は昔は3種類しか選べなかったと思うのですが、今は7種類選べて1400x1050にしてます。 画面の色を16か32ビットに一度変えてしまうと、もう8ビットの選択肢はなくなってしまいます。

  • VBでハイパーリンクのファイル拡張子毎に起動アプリを設定したい。

    VBでハイパーリンクのファイル拡張子毎に起動アプリを設定したい。 VBでアプリを作成中です。以下の二つ教えてください 1.EXCELでハイパーリンクの画像ファイル(JPGファイル)をクリックしたとき、常にMICROSOFT OFFICE PICTURE MANAGER(他の画像ビューアではなく)が起動するよう設定するVBプログラム。 ただしEXCELが終了すれば設定は元に戻すようにしたい。 2.MICROSOFT OFFICE PICTURE MANAGERにカスタムボタンを追加することはできるでしょうか。   とりあえず終了ボタンを追加したい。 以上よろしくお願いします。  

  • ピクチャーボックスやイメージに表示せずに画像を保存する方法を教えて下さい。

    開発環境はVB6.0です。 説明べたなので箇条書きで記入しました。 (1)ボタンを押す (2)Dドライブの中にあるJPGファイル(複数)をZドライブにコピー(もしくは移動) コピーでも移動でもどちらでもかまいませんが、なんせ異なったドライブにJPGファイルを写す方法を探しています。 VB上に画像を表示して保存する方法はわかりましたが、   Call SavePicture(Image1, "z:\meibo\a\1.jpg") これでは一気に保存することが出来ないのでとても困っています。 どなたか教えて下さい。よろしくお願いします。

  • Windows 画像とファックス ビューアについて

    Windows 画像とファックス ビューアを起動する際(画像ファイルを開くとき)にとても時間がかかるようになってしまいました。半年ほど前は画像ファイルをダブルクリックしてから約1~2秒で画像が表示されていました。ところが、現在は約10秒前後です。数百KBのものならさぼど時間はかかりませんが、JPEGでも解像度が1000を超えると遅い状態です・・・ なぜ、こんなことなになってしまったのでしょう。 解決策があれば、ご教授よろしくお願いいたします。