[delphi-users:5243] メタファイルの白黒化について

8 views
Skip to first unread message

村の人

unread,
Jul 25, 2019, 1:46:34 AM7/25/19
to delphi...@freeml.com
お世話になります、黒川と申します。

Delphi7です

メタファイルを白黒化しようと、メタデータの線や文字については
サンプルなど探しながらできるようになったのですが、
メタファイルとはいえ、中には画像データが入っているものも
あり、ビットマップデータ部分についてはどのように色変換を
してよいか分からずにいます。

添付ファイルを付けて申し訳ございません。
サンプルの画像を読み込んで、白黒変換すると、
部分的にカラーのまま残るものがあります。

※抜粋です
EMR_SETTEXTCOLOR, EMR_SETBKCOLOR:
begin
with PEMRSetTextColor(@pEMFR)^ do begin
crColor := GrayScale(crColor, True);
↑テキスト文字はこのような事をすると指定の色に変更できますが
ような事をする
end;
end;

EMR_BITBLT, EMR_STRETCHBLT, EMR_MASKBLT, EMR_STRETCHDIBITS, EMR_PLGBLT:
begin
ビットマップなどのデータは構造体の中にビットマップのデータその
ものが居るという事でしょうか?取り出しの仕方とか参考になるものはご存知な
いでしょうか?
end

以上



MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
スマホアプリ版で100万ダウンロード突破の
「キャプテン翼ZERO~決めろ!ミラクルシュート~」
HTML5ゲームプラットフォーム「ゲソてん byGMO」にて、
PCブラウザ版を好評配信中!
https://gesoten.com/games/genre/sports/tsubasa-zero
------------------------------------------------------[freeml byGMO]--

あなたの街のチラシがいつでも無料で見放題!
チラシをクリックしてチラシが拡大されたらポイントゲット♪
まずはかんたん登録♪ -ポイントタウン-
https://www.pointtown.com/ptu/rd.cgi?cid=8912
----------------------------------------------------------------------
メタファイル白黒化.zip

Fukushi

unread,
Jul 25, 2019, 2:02:46 AM7/25/19
to delphi...@freeml.com
黒川さん、こんにちは。福士です。

> メタファイルを白黒化しようと、メタデータの線や文字については
> サンプルなど探しながらできるようになったのですが、
> メタファイルとはいえ、中には画像データが入っているものも
> あり、ビットマップデータ部分についてはどのように色変換を
> してよいか分からずにいます。

全く詳しくないのですが、ちょっと調べてみたらWMF/EMFの仕様はマイクロ
ソフトから公開されていますね(ご存じだったらすいません)。

[MS-WMF]: Windows Metafile Format | Microsoft Docs
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-wmf/4813e7fd-52d0-4f42-965f-228c8b7488d2

[MS-EMF]: Enhanced Metafile Format | Microsoft Docs
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-emf/67fd513f-e633-419c-93c2-8368779ac15a


> ビットマップなどのデータは構造体の中にビットマップのデータその
> ものが居るという事でしょうか?取り出しの仕方とか参考になるものはご存知な
> いでしょうか?

WikipediaのWMFの説明にもありますが、WMF/EMFは

『基本的にWMFファイルはWindowsのグラフィックスAPI層であるGDIが実行すべき
関数呼び出しのリストであって、それによって画像が再生される。』
(https://ja.wikipedia.org/wiki/Windows_Metafile から引用)

というものですから、画像もおそらくはGDIの内部データ形式(Bitmapの
ような)で保持されているものと思われます。


---
東洋テクニカルシステム株式会社 システム開発部 福士 光
Hikaru Fukushi (Toyo Technical System Inc.)
mailto:fuk...@tts-inc.co.jp


MLホームページ: https://www.freeml.com/delphi-users

----------------------------------------------------------------------
【重要】必ずお読みください
■freeml byGMOサービス終了のお知らせ■
2019年12月2日(月)12:00をもちまして、
サービスの提供を終了させていただきます。
詳しくはこちら
http://ck.freeml.com/rd.php?cid=11272

村の人

unread,
Jul 25, 2019, 8:21:51 PM7/25/19
to delphi...@freeml.com
福士様

こんにちは、黒川です

> 全く詳しくないのですが、ちょっと調べてみたらWMF/EMFの仕様はマイクロ
> ソフトから公開されていますね(ご存じだったらすいません)。

データ構造についての記載そのもののようですね。
ありがとうございます。
これを参考に該当する構造体探してアドレスから分かれば
ビットマップに関する情報もなんとかなるのでしょうかねぇ
構造体の名称までは分かりそうなのでもう少し情報をあたってみます。

参考情報ありがとうございます。

以上

村の人

unread,
Jul 25, 2019, 11:17:31 PM7/25/19
to delphi...@freeml.com
お世話になります、黒川です。

> メタファイルを白黒化しようと、メタデータの線や文字については

続きです。

福士様の情報を参考に、EMR_BITBLTやEMR_STRETCHDIBITS
について、offBmiSrcとoffBitsSrcからBitmapInfoとBitmapデータポインタ
を取得しCreateDIBitmapで取得したハンドルをTBitmapのHandle
にセットする事で、SaveToFileなどしてみるとビットマップのデータ
は取得できました。

しかしながらこの方法ですと、新しくBitmapを作成されているので、
元のデータを変更する事が出来ません。

取得したTBitmapを編集する事はできますので、
白黒化など処理した後で、メタファイルに書き戻す事になるのでしょうか?

そもそもCreateDIBitmapではなく、別の方法でメタファイル内のビットマップ
に直接アクセスする手順があるように思って試行錯誤するのですが、
この辺得意ではないので手順がひらめきません。
該当の構造体の名称などでネット検索してみるものの関連の情報にたどり着か
なくて途方にくれてます。

もうちょいなのですが・・・。
Reply all
Reply to author
Forward
0 new messages