Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VBAでワークシート部分のgetpixelしたいです
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30608#CommentId84514
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
snowmansnow
 (社会人)
投稿日時
2021/6/6 23:37:45
こんばんは、魔界の仮面弁士様。
また、お名前を間違えてごめんなさい。
最初の頃に、るきお様に注意されたのに、気を付けます。
VBAは、Excel の VBAです。
エクセルは、2016の32bit版です。OSはWIN1Oproの64bitです。
確認環境で、エクセルは、2016の64bit版(OSはWIN1Oproの64bit)も使用する場合がございます。
>取得失敗を判定するなら
取得失敗を判定は、MSGBOXが易しいので多用しております。気をつけます。
>あるいは CreateDC で "DISPLAY" のコンテキストを得るようにします。
CreateDC で "DISPLAY" のコンテキストは、なぜかエラーになってしまい、
>代わりに「hDC = GetDC(ByVal CLngPtr(0))」を試してみてください。
hDC = GetDC(ByVal CLngPtr(0))で、試してみました。
無事、色を取得できたようですが、
なぜか、RGBが逆さな気がしました。
また、元の貼り付けた画像のPIXELと違う気がしました。
x = ActiveWindow.PointsToScreenPixelsX(0)
y = ActiveWindow.PointsToScreenPixelsY(0)
の、最初のPIXELの色は、合致してる事を確認できました。
>net ではなく .NET (ドットネット) ですよ。
>また、「c#」ではなく 「C#」と書きます。
net(c#)も
.NET、C#を使うように気をつけます。
>GetWindowTextW などの Wide 系 API にすること
GetWindowTextAも文字列が影響する事をしらなかったので、注意します。
>ワークシート部分を fn で示されたファイルに変換するためのコードはどうされましたか?
画像ファイルの画素を取り出すコードは、途中経過で、
今回の質問については、後述しております。
>異常系に到達した場合の流れもきちんと作りこみましょう。
最初、エラーに気が付かなくて、修正して作ったつもりでしたので、
ENDIFの位置に気を付けます。
>> Private Type PICTDESC
>提示頂いたコードでは未使用のようですが、もしかして、
引用したコードを精査しておりませんでした。未使用の定義でした。他意はございません。
>Long と LongPtr の使い分けに統一感が無い
64bitと32bitの使い分けが、まだはっきりわかっておらず、
また、2つの環境で使う予定な事と、PTRSAFEのような明確なエラーにならないので、
整理できておりませんでした、徐々に出来るようになりたいです。(まだ呪文)
>GdipBitmapGetPixel は 32bit な色空間 (ARGB) を返す
別なWEBでPNGの透明化に言及されておられましたが、気が付きませんでした。
>' OLE_COLOR … 00BBGGRR な 24bit 色(もしくは 800000nn で管理されるシステム色)
>' COLORREF … 00RRGGBB な 24bit 色
>' ARGB … AARRGGBB な 32bit 色
先ほどの色が逆さの謎が解けました。
>この h は何を求めるためのコードですか?
国土地理院様の高度タイルのPNGから高度を求める途中式(100倍)です。
>GdipDisposeImage で解放するのを忘れていますよ。
>後始末はきちんと行いましょう。
気をつけます。
>color 変数の宣言を忘れているのではありませんか?
はい、定義しましたら、色が出てきました。
※WEBにUPする時に、文字制限に引っかかったので、クリップボード関係の定義を削除してしまいました
>VBA7 未満での PtrSafe は余計でしたね。
これ以外なのか、私の環境ではエラーになってしまいました・・・(上記)
>書き間違い。orz
>VB の 24bit 色と同じ並び
こんがらがっちゃいました(上記)
>VBA でハンドルやポインタを扱うときは
ハンドルは、(64bitの呪文を何かで拝見しました)。
ポインタは、まだよくわかりません。
>OLE_HANDLE は
難しいですが、注意できるようになりたいです。
今回は、国土地理院タイルの、高度タイルの標高を求めたい所からスタートしました。
LOADPICTUREで、すぐ出来ると思ったのですが、色んな回り道をして、まだ、
ワークシート画像からは、高度を求める所まで行ってません。(pixelが違う気が・・・)
(クラスライブラリや、APIで直接PNGを扱った方が、今のところ、私は間違いないです)
クラスライブラリも、コードは容易でしたが、クラスライブラリも、コンソールアプリもダメで、
フォームアプリのクラスライブラリに到達するまで時間がかかりました。
GDI+を教えてもらって、やっぱりVBAは、まだまだ凄いなぁ、と思いました。
いっぱい指摘を受けましたが、大変勉強になりました。
クラスライブラリも好きですが、VBA単体で出来る事を増やしていきたいです。
大変ありがとうございました。
また宜しくお願いします。