gpt4 book ai didi

delphi - 如何使用 GDI 按像素强度将位图转换为灰度图?

转载 作者:行者123 更新时间:2023-12-03 14:51:00 25 4
gpt4 key购买 nike

我正在寻找如何使用 GDI(而不是 GDI+)将 32 位位图转换为灰度的简单解决方案。有没有可能,例如通过更改位图的调色板或其他什么?

当然,Delphi 中有很多例子,例如 this one ,但我正在寻找一个 WinAPI 函数,它可以在不迭代的情况下完成此操作。

最佳答案

我还没有发现任何单个 GDI 函数可以执行此操作。正如大卫在评论中提到的,最简单的方法是扫描每行并计算像素颜色。您正在寻找的可能是 luminance公式。

这个公式有一些变化,在下面的例子中我使用了 ITU 推荐的公式。 ,参见this document第 2.5.1 节。正如我在某处发现的,这个公式用于例如即使是众所周知的 Adob​​e Photoshop。以下代码示例支持并仅期望 24 位像素格式位图作为输入:

procedure BitmapGrayscale(ABitmap: TBitmap);
type
PPixelRec = ^TPixelRec;
TPixelRec = packed record
B: Byte;
G: Byte;
R: Byte;
end;
var
X: Integer;
Y: Integer;
Gray: Byte;
Pixel: PPixelRec;
begin
for Y := 0 to ABitmap.Height - 1 do
begin
Pixel := ABitmap.ScanLine[Y];
for X := 0 to ABitmap.Width - 1 do
begin
Gray := Round((0.299 * Pixel.R) + (0.587 * Pixel.G) + (0.114 * Pixel.B));
Pixel.R := Gray;
Pixel.G := Gray;
Pixel.B := Gray;
Inc(Pixel);
end;
end;
end;

关于delphi - 如何使用 GDI 按像素强度将位图转换为灰度图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com