HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1105
とあるプログラマアイコンから画像4解決


とあるプログラマ

リンク

2018/11/5(Mon) 22:56:21|NO.85798

現在、ランチャーのようなものを作りたく、思考しているのですが、登録したファイルからアイコンを抜き取りPNG等でキャッシュフォルダに保存。起動時にそこから呼び出すことで高速化。というのものを考えています。
そこでアイコンをPNGにする作業が必要なのですが、調べてもアイコンを画像にする方法がヒットしませんでした。
LoadImage関数から読み込んだアイコンを画像として保存する方法か、それに準ずる関数はあるのでしょうか。
bufferスクリーンに読み込んで保存も考えましたが、そうすると背景の透過ができません。
また、起動するたびにアイコンを読み込む方法とこの方法では読み込み時間に感じるような遅延は生まれるでしょうか。現在考えている仕様は、登録できるアプリは最大64個、一度起動したらタスクトレイで常駐しホットキーで表示(いちいち閉じずに非表示で待機)です。



この記事に返信する


ham

リンク

2018/11/6(Tue) 13:05:26|NO.85801

https://meteoricstream.com/palhsp_detail/43.html
こちらを使わせてもらって試してみましたが
pal_DrawIconを100回繰り返して掛かった時間は平均33msでした。(割と古いPCで)
あまり内部処理の詳しいことは存じませんが、処理時間は気にしなくてもよさそうですかね?



外部プログラム任せでもよければPowerShellで
exeファイルからアイコンを抽出してpngで保存できるみたいです。
http://suzuzusu.hatenablog.com/entry/2016/10/14/043726

ただ、wikiによればPowerShellはWindows7以上からしか標準で入っていないらしい...


一応参考になれば幸いです。



MillkeyStars

リンク

2018/11/6(Tue) 15:53:34|NO.85802

描画だけならこんな感じなのかな。

#uselib "Shell32.dll" #func ExtractIcon "ExtractIconA" int,sptr,int #uselib "user32.dll" #func DrawIcon "DrawIcon" int,int,int,int screen 0,800,600,0 : color 255,0,0 : boxf ExtractIcon hInstance,"C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe",0 IconHandle = stat if IconHandle == 0 : dialog "アイコンをロードできませんでした" : stop DrawIcon hdc,200,100,IconHandle redraw 1
アイコンだけなら、普通に 32Bit DC ですべてロードしてそれ自体を BMP として保存した方が効率いいと思うけどね。
PNG って基本圧縮・解凍をするからサイズを節約したいとか以外だと、PNGの方が処理速度としては遅い。



あらや

リンク

2018/11/6(Tue) 16:06:29|NO.85803

>LoadImage関数から読み込んだアイコンを画像として保存する方法か、それに準ずる関数はあるのでしょうか。
>bufferスクリーンに読み込んで保存も考えましたが、そうすると背景の透過ができません。

HSPの標準ウィンドウやバッファは、アルファ値情報が無いので
バッファ等にコピーすると透過情報が無くなってしまいます。

LoadImageで読み込んだ画像データを
Artlet2Dの仮想イメージに1ドットずつアルファ値を含めて描画した上で
PNG画像として保存という形ならば出来ると思いますが、
そうすると最初にPNG画像を作るときだけとはいえ、逆に時間が掛かりそうです。

一旦、ランチャーと同じ背景のバッファにアイコンを描画して
背景込みで画像として保存した方が早いでしょうね。
背景が変更されるとか、何か修正が必要になったら
その都度アイコンを読み込んで保存する必要があるという所が欠点になってしまいますが。。。


そもそもですが、
直接プログラムのアイコンを読み込みHSPウィンドウにコピーするか
作成したPNGを読み込みHSPウィンドウにコピーするか、
どちらもさほど速度的な差はないかと思います。



とあるプログラマ

リンク

2018/11/7(Wed) 05:43:14|NO.85807

返信遅れてすみません。
みなさん回答ありがとうございます。
やはりPNGに保存よりも起動毎に取ってきたほうが効率と汎用性は良さそうですね。
一応今回はアイコンをPNGにするのは取りやめたいと思います。
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.