喫茶XRAYトップページ

[スレッド全体
]

[7246] 勝手な推測返信 削除
2014/2/22 (土) 14:32:36 Mr.XRAY
[excelからpasを行指定で開くには]
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+201402/14020018.txt

これ,おそらく中国の方じゃないかと思うんですよね.
前にも同じ様なのが何回かあった記憶があります.
で,期待するレスがないとスパムのような書き込みが続くと... (^^;

いわゆる「丸投げ」な質問なんですが,
ネット上にある Tips 等はこういう形式ですよね.
このようなタイトルの後に具体的なコードが書いてあります.
そのようなレスを期待しているんじゃないでしょうか.

中国って,あのような掲示板ってないのかな.
でも,エンバカデロのコミュニティがあると思うのですが.

# 最近,中国の方からメールがこないなぁー,と思ってブログをみたら
# 全く更新されていませんね.Delphi というかプログラミングを止めたのかな


[7253] テスト用の新規プロジェクトは...返信 削除
2014/2/23 (日) 23:58:23 Mr.XRAY
># こうやって,他の人の文章,書き込みを読むことによって
># 自分自身が書くときの参考にすることは,大切だと思うのですよ.


というわけで,話のついでに.

[TImageを8bit BMPで保存したい]
http://www.freeml.com/delphi-users/3631/latest

によると,複数のビットマップ画像をディスクから読み込んで,TImage に表示し,
その TImage に表示している画像を,別のビットマップとして保存する.
というのがあります.
この時,画像の色数,つまりビット深さを 8 ビットにしたいということ.
と解釈しました.

で,私目がよく言う,「テスト用の新規プロジェクト」はどうなるかと言いますと.

(1) 複数のビットマップを描画したから 8 ビットで保存できないのか
(2) 1 つの画像を TImage に表示した場合ではならないのか

と,いろいろ考えるわけです.
単純なのは,当然 1 つだけの場合です.
で,以下がテストコードです,グローバル変数は使用していません.
ボタンクリックごとに独立しています.

結果は,保存した画像ファイルの色数(ビット数) は 32 ビットとなります.
ですから,8 ビットにしたければ,まず,このテストコードでやっていくことになります.

動作確認環境は Windows 7 U64(SP1) + Delphi XE Pro です.

//-----------------------------------------------------------------------------
//  ディスクから画像ファイルを読み込んでTImageに描画
//  画像ファイルのビット深さは8ビット
//-----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  TmpBMP: TBitmap;
begin
  TmpBMP := TBitmap.Create;
  try
    TmpBMP.LoadFromFile('503-256.bmp');
    Image1.Canvas.StretchDraw(Rect(0, 0, 250, 250), TmpBMP);
  finally
    FreeAndNil(TmpBMP);
  end;
end;

//-----------------------------------------------------------------------------
//  TImageに表示している画像をビットマップとして保存
//  保存後は色数が32ビットの画像となる
//-----------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
  Image1.Picture.SaveToFile('AAA.bmp');
end;

「コードを絞り込む」
「その問題となっている機能だけをテストするプロジェクトを作成する」
の例として.

えっ? 何ですか ? じゃぁ,どうやるのかって?
ちょっと前のスレッドに,参考となる内容があるじゃありませんか?
えっ? どうしても知りたい ?


[7254] Re:テスト用の新規プロジェクトは...返信 削除
2014/2/24 (月) 00:11:45 Mr.XRAY
> えっ? どうしても知りたい ?

しょうがないなーって,誰も教えてくれとは言ってませんが.
例えばこんなのはどうでしょう.
動作確認は,前と同じ.
えっ? さっきの書き込み書いてから考えていたんだろうって,
ほっといてください!!

ただし,このコードが,Delphi ML で質問された方の参考になるかは
分かりません.私が勝手に内容を解釈しているたげですので.

//-----------------------------------------------------------------------------
//  TImageに表示している画像をビットマップとして保存
//  保存した画像は色数が8ビットの画像となる
//-----------------------------------------------------------------------------
procedure TForm1.Button3Click(Sender: TObject);
var
  TmpBMP : TBitMap;
begin
  TmpBMP := TBitMap.Create;
  try
    TmpBMP.PixelFormat := pf8bit;
    TmpBMP.SetSize(Image1.Picture.Bitmap.Width, Image1.Picture.Bitmap.Height);
    TmpBMP.Canvas.Draw(0, 0, Image1.Picture.Bitmap);

    TmpBMP.SaveToFile('AAA.bmp');
  finally
    TmpBMP.Free;
  end;
end;

TBitmap は特に指定しないかぎり,ビット深さは 32 ビットとなります.
そこで,上のコードの try の中では,

(1) 生成したビットマップのビット深さを PixelFormat で 8 ビットとする
(2) そのビットマップのサイズを TImage のビットマップと同じにする
(3) そのビットマップの Canvas に何かを描く.ここでは別のビットマップを描画
    別のビットマップとは,TImage に描画されているビットマップ
(4) ビットマップを保存する

という手順になっています.
元の,生成したビットマップを 8 ビットとしています.したがって,何を描画
しても,8 ビットのビットマップは,8 ビットのビットマップのままです.
ということを利用した方法です.


[7266] ビットマップの色数を変更.返信 削除
2014/2/24 (月) 23:23:06 Mr.XRAY
忘れない内にサンプル作成してみました.

[03_ビットマップ画像のビット深さ ( 色数 ) の変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/910_DisableBitmap.htm#03


[7267] Re:ビットマップの色数を変更.返信 削除
2014/2/27 (木) 08:16:07 Mr.XRAY
> http://mrxray.on.coocan.jp/Delphi/plSamples/910_DisableBitmap.htm

以下のサンプルを追加して,記事を変更しました.

[04_TNkDIB を使用したビットマップ画像の減色]
[05_TGIFImage を使用したビットマップ画像の減色]
[06_ビットマップ画像のグレイスケール化 ]


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82