タイトルのとおりなのですが、
Imageに取り込んだ白黒2値のビットマップの黒い部分を赤とか青とか、
黒以外の色で表示する方法は無いものかと、解説や参考例を探していますが
見当たりません。
よろしくお願いします。
Delphi6Pro+winXPです。
こんな感じで pf1bit 画像で 赤と青で表示する事が可能です
var
PaletteEntries : array[0..1] of TRGBQUAD;
begin
Image1.Picture.Bitmap.PixelFormat := pf1bit;
Image1.Picture.Bitmap.SetSize(200,200);
Image1.Picture.Bitmap.Canvas.Brush.Color := $01000000;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(0,0,100,200));
Image1.Picture.Bitmap.Canvas.Brush.Color := $01000001;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(100,0,200,200));
PaletteEntries[0].rgbBlue := 255;
PaletteEntries[0].rgbGreen := 0;
PaletteEntries[0].rgbRed := 0;
PaletteEntries[0].rgbReserved := 0;
PaletteEntries[1].rgbBlue := 0;
PaletteEntries[1].rgbGreen := 0;
PaletteEntries[1].rgbRed := 255;
PaletteEntries[1].rgbReserved := 0;
if SetDIBColorTable(Image1.Picture.Bitmap.Canvas.Handle,0,2,PaletteEntries) = 0 then
begin
GetLastError;
end
else
begin
if DeleteObject(Image1.Picture.Bitmap.ReleasePalette) = Boolean(0) then
begin
GetLastError;
end;
end;
Image1.Invalidate;
end;
こんにちはKHE00221さん
こんなに早く回答をいただけるとは思いませんでした。
なのに・・・今日は1日現場仕事で留守にしていました。(現場の多い稼業です)
内容の理解はともかく、ボタンを追加し、頂いた例を貼り付け実行したところ、
[エラー] Unit1.pas(65): 未定義の識別子 : 'SetSize'
「SetSize」は、ナッキーの「Turbo Delphiはじめて奮戦記」ほか、あちこちに
解説がありそうですので、残業が済んだら体を温め、今晩勉強してみます。
結果を出すには時間が掛かりそうですが、ありがとうございました。
以下テスト----------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
BitMap : TBitMap;
procedure ImageView(ViewBitmap: TBitmap);
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
BitMap.LoadFromFile(OpenDialog1.FileName);
Form1.ImageView(Bitmap);
end;
end;
procedure TForm1.ImageView(ViewBitmap: TBitmap);
begin
Image1.Height := ViewBitmap.Height;
Image1.Width := ViewBitmap.Width;
Image1.Picture.Bitmap := ViewBitmap;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
BitMap := TBitMap.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BitMap.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
//KHE00221さん
var
PaletteEntries : array[0..1] of TRGBQUAD;
begin
Image1.Picture.Bitmap.PixelFormat := pf1bit;
Image1.Picture.Bitmap.SetSize(200,200);
Image1.Picture.Bitmap.Canvas.Brush.Color := $01000000;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(0,0,100,200));
Image1.Picture.Bitmap.Canvas.Brush.Color := $01000001;
Image1.Picture.Bitmap.Canvas.FillRect(Rect(100,0,200,200));
PaletteEntries[0].rgbBlue := 255;
PaletteEntries[0].rgbGreen := 0;
PaletteEntries[0].rgbRed := 0;
PaletteEntries[0].rgbReserved := 0;
PaletteEntries[1].rgbBlue := 0;
PaletteEntries[1].rgbGreen := 0;
PaletteEntries[1].rgbRed := 255;
PaletteEntries[1].rgbReserved := 0;
if SetDIBColorTable
(Image1.Picture.Bitmap.Canvas.Handle,0,2,PaletteEntries) = 0 then
begin
GetLastError;
end
else
begin
if DeleteObject(Image1.Picture.Bitmap.ReleasePalette) = Boolean(0) then
begin
GetLastError;
end;
end;
Image1.Invalidate;
end;
end.
DEL6にはSetSizeはありませんでしたね
Width と Height でサイズを指定して下さい
あと Image のサイズも設定しておいて下さい
これって、ただパレットのエントリを交換するだけでしょ。
関数にすると簡単なのでは。
Width と Height でサイズを指定で動きました。
この例を元に、更に調整してみます。
大変ありがとうございました。
えーとさん
>これって、ただパレットのエントリを交換するだけでしょ。
早く、それが直ぐ解るような一人前の初心者に成りたいものです。(^^ゞ
でも、意味が解らなくても、こうして手がかりをいただくと、調べる事も
出来て少しは前に進めます。
>関数にすると簡単なのでは。
これも挑戦してみて、つっかえたら再質問させていただく事として
とりあえず解決とさせていただきます。
KHE00221さん、えーとさん本当にありがとうございました。
解決ボタン押し忘れました。
ツイート | ![]() |