彩色图如何转成灰度图???(50分)

  • 主题发起人 主题发起人 wangwei200208
  • 开始时间 开始时间
W

wangwei200208

Unregistered / Unconfirmed
GUEST, unregistred user!
请给出具体算法或例程!!谢谢!!
 
设R、G、B分别代表彩色图像一个像素的三个色彩分量
C:=Round(0.299*R+0.587*G+0.114*B+0.1);
把每一个点的R、G、B代入上式,计算结果C替换这个点R、G、B,就得到灰度图象了
如果你要源程序,请留信箱
 
Var BitMap:TBitmap;
begin
TJPEGImage(Image1.Picture.Graphic).Grayscale:=True;
Image1.Picture.SaveToFile('C:/aa.JPG');
BitMap:=TBitmap.Create;
try
With BitMap do
begin
Width:=Image1.Picture.Width;
Height:=Image1.Picture.Height;
Canvas.Draw(0,0,Image1.Picture.Graphic);
end;
TJPEGImage(Image1.Picture.Graphic).Assign(BitMap);
TJPEGImage(Image1.Picture.Graphic).CompressionQuality:=10;
TJPEGImage(Image1.Picture.Graphic).Compress;
TJPEGImage(Image1.Picture.Graphic).SaveToFile('C:/a.JPG');
finally
BitMap.Free;
end;

还有更简单的代码:
procedure TFormMain.mnuColorToGrayClick(Sender: TObject);
var
bmp : Tbitmap;
X, Y: Integer;
I, nGray ,nTemp : Byte;
ColorTable: array[0..255] of TRGBColor;
pRGB: PRGBColor;
begin
bmp := TBitmap.Create;
bmp.Assign(image1.Picture.Graphic);

for Y := 0 to Bmp.Height - 1 do
begin
pRGB := Bmp.ScanLine[Y];
for X := 0 to Bmp.Width - 1 do
begin
// nGray :=(pRGB.R+pRGB.G+pRGB.B) div 3 ; // 变灰度算法1
nGray := Round((0.30 * pRGB.R) + (0.59 * pRGB.G) + (0.11 * pRGB.B)); // 变灰度算法2
pRGB.R := nGray;
pRGB.G := nGray;
pRGB.B := nGray;

Inc(pRGB);
end;
end;

image1.Picture.Graphic.Assign(bmp);
image1.Refresh;

bmp.Free; //释放空间,其实是全局变量更快
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
764
DelphiTeacher的专栏
D
D
回复
0
查看
738
DelphiTeacher的专栏
D
D
回复
0
查看
691
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部