お世話になります。
現在、4BITのグレースケールBMPを作りたく試行錯誤しているのですが
PixelFormat := pf4bit;
にしただけではゴテゴテのBMPが生成されるのですが、photoshop等で作成すると綺麗なBMPファイルが生成されます。
当方imageen等は所有していますが、それもしくは他の方法で綺麗なBMP画像のファイルを生成する方法はございますでしょうか。
すいませんが宜しくお願いいたします。
photoshop も 4 ビット化の時の設定もあるし,
>当方imageen等は所有していますが、それもしくは他の方法
imageen を知らないので,それもしくはと言われても分かりません.
多分,単純にフルカラーから 4 ビット(16色) に「減色」したいのだと思います.
環境も不明ですので,photshop とか imageen とかいうことは抜きにして.
「減色」であれば,中村拓男さんの TNkDIB (NkDIB) または DHGL 当たりはどうでしょう.
グレイスケールは,例えば以下のが使えると思います.
(1) この掲示板のサイトにある Graphic Effect
Delphi 2 では修正が必要
http://madia.world.coocan.jp/delphi/Effect/index.htm
(2) EDN の ID: 27677
http://cc.embarcadero.com/item/27677
減色は
「減色 色 Bitmap Delphi」または「Reduction Color Bitmap Delphi」で,
グレイスケールは,
「Grayscale Bitmap Delphi」
等で検索すると,まだいろいろあるかも知れません.
でも,何故その,その imageen 等を使用しないのでしょう.
それで可能であれば,それでいいのではないかとも思うのですが,
imageen を知らないで書いているので,勘違いしていたらゴメンナさい.
Mr.XRAY さん、回答ありがとうございます。
環境はD7です。
検索していると海外でよくimageenというのを見かけたので、それで出来るかなと思い言ってみました。こだわりが有る訳では無いので4bit bmpが出来れば何でも気にしません。
教えていただきました TNkDIB と DHGLためしてみました。
TNkDIBはuses NkImage; でひっかかり何も確認出来ませんでしたが、DHGL
は、4-7のdemoを1日中いじっていましたが使い方が理解出来ない状態です。
DHGLでtimageの画像を4bit BMPで保存するには何かトリッキーな方法が必要なんでしょうか?
まず,環境というのは,Delphi のバージョンだけとは限りません.
>TNkDIBはuses NkImage; でひっかかり何も確認出来ませんでしたが
ユニット,つまりファイルで提供されているコード類は,通常,uses に追加して使用します.
追加するのは,ユニット名ですが,実際には拡張子である .pas を除いたファイル名です.
そして,多くの場合,そのユニットの提供者が説明を書いています.
また,そのファイルは,「パスの通った場所」に置く必要があります.
http://mrxray.on.coocan.jp/Delphi/CompoInstall/index.htm#02
例えば TNkDIB の場合は,manual.txt というがあり,そこに書いてあります.
ここに書いてもいいのですが,是非,自分で確認されることをお勧めします.
ひっかかりました,出来ませんとか,分かりませんでは,何が問題なのか分かりません.
新規にプロジェクトを作成して,ボタンを配置して,何かしらのコードを書かない限り,プログラムは動作しません.
どんなコードを書いたのでしょう ?
>何かトリッキーな方法が必要なんでしょうか?
「トリッキーな方法」?
↓ こんなところも,「眺める」のではなく,一度お読みになると,今後の参考になるかも知れません.
http://www.hyuki.com/writing/techask.html
色数の多いビットマップ画像から,色数の少ないビットマップを作成することを「減色」と言います.
少し考えてみると分かると思いますが,品質の高い減色をするには,それなりのアルゴリズムがあります.
これを自分で書くのは大変です.それで,TNkDIB の使用を提案したわけです.
Delphi 2007 以上であれば,他の方法も考えられたのですが.環境が書いてなかったですからね.
http://www.syuhitu.org/other/dcol/dcol.html
http://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%82%B6
>品質の高い減色をするには,それなりのアルゴリズムがあります.
当然,減色に使用するアルゴリズムによって結果が違ってきます.
それで,元の画像はどんな画像なのでしょう ?
色のビット数,カラーなのか,グレイスケールなのかとか...
放置状態となっていますが,検索した結果,情報がないと寂しいので,追加しておきます.
前提条件として,コンポーネントや Form1 のUni1 以外の別のユニットの使用方法は知っておく必要があります.
[122] [08_他のユニットは uses 部に追加して使用する]
http://mrxray.on.coocan.jp/Delphi/plSamples/122_PluralForms.htm#08
減色のアルゴリズム (理論や処理方法のこと) を自分でコーディングするのは大変です.
そこで,他の方が作成したコンポーネントやユニット類を使用する場合の参考です.
ネット上を探せば他にもあるかも知れません.
下のリンクから始まる記事を参考にしてください.
[910] [03_ビットマップ画像のビット数 ( 色数 ) の変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/910_DisableBitmap.htm#03
記事の中に,以下のような説明がある場合,TBitmamp はクラス名 (コンポーネント名) です.
TBitmap.PixelFormat
実際に使用する時は,TBitmap をインスタンス名 (コンポーネントやクラス名の実体名) にします.
例えば,以下のコードの時には,SrcBmp.PixelFormat がそれに該当します.
procedure TForm1.Button1Click(Sender: TObject);
var
SrcBmp : TBitmap;
begin
SrcBmp := TBitmap.Create;
SrcBmp.PixelFormat := pf8bit;
//以下,省略
ツイート | ![]() |