4BITのBMPファイルの作り方


ぺぺ  2014-02-25 16:44:10  No: 46077

お世話になります。

現在、4BITのグレースケールBMPを作りたく試行錯誤しているのですが
PixelFormat := pf4bit;

にしただけではゴテゴテのBMPが生成されるのですが、photoshop等で作成すると綺麗なBMPファイルが生成されます。

当方imageen等は所有していますが、それもしくは他の方法で綺麗なBMP画像のファイルを生成する方法はございますでしょうか。

すいませんが宜しくお願いいたします。


Mr.XRAY  2014-02-28 09:13:29  No: 46078

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 を知らないで書いているので,勘違いしていたらゴメンナさい.


ぺぺ  2014-03-02 11:52:17  No: 46079

Mr.XRAY さん、回答ありがとうございます。
環境はD7です。

検索していると海外でよくimageenというのを見かけたので、それで出来るかなと思い言ってみました。こだわりが有る訳では無いので4bit bmpが出来れば何でも気にしません。

教えていただきました TNkDIB と DHGLためしてみました。

TNkDIBはuses NkImage; でひっかかり何も確認出来ませんでしたが、DHGL
は、4-7のdemoを1日中いじっていましたが使い方が理解出来ない状態です。

DHGLでtimageの画像を4bit BMPで保存するには何かトリッキーな方法が必要なんでしょうか?


Mr.XRAY  2014-03-03 13:49:12  No: 46080

まず,環境というのは,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


Mr.XRAY  2014-03-03 15:29:33  No: 46081

>品質の高い減色をするには,それなりのアルゴリズムがあります.

当然,減色に使用するアルゴリズムによって結果が違ってきます.
それで,元の画像はどんな画像なのでしょう ?
色のビット数,カラーなのか,グレイスケールなのかとか...


Mr.XRAY  2014-03-10 04:10:27  No: 46082

放置状態となっていますが,検索した結果,情報がないと寂しいので,追加しておきます.

前提条件として,コンポーネントや 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;
  //以下,省略


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加