- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将像素从 BMP1 复制到 BMP2,但复制的图像出现乱码。为什么?
注意:输入图像为pf8bit;
TYPE
TPixArray = array[0..4095] of Byte;
PPixArray = ^TPixArray;
procedure Tfrm1.CopyImage;
VAR
BMP1, BMP2: TBitmap;
y, x: Integer;
LineI, LineO: PPixArray;
begin
BMP1:= TBitmap.Create;
BMP2:= TBitmap.Create;
TRY
BMP1.LoadFromFile('test.bmp');
BMP2.SetSize(BMP1.Width, BMP1.Height);
BMP2.PixelFormat:= BMP1.PixelFormat;
for y:= 0 to BMP1.Height -1 DO
begin
LineI := BMP1.ScanLine[y];
LineO := BMP2.ScanLine[y];
for x := 0 to BMP1.Width -1 DO
LineO[x]:= LineI[x];
end;
//BMP2.SaveToFile('out.bmp');
imgOut.Picture.Assign(BMP2); //TImage
FINALLY
FreeAndNil(BMP2);
FreeAndNil(BMP1);
END;
end;
对于保存的图像,图形编辑器会显示“像素深度/颜色:索引,256 调色板”。
最佳答案
可能值得指出的是,8 位位图不一定是灰度的。
Instead ,它是一个带有“颜色表”的位图,最多包含 256 个条目,每个像素都引用该表中的一个条目。因此,如果一个像素的值为 185,这意味着它应该使用位图“颜色表”中位置 185 处的颜色。因此,与 16、24 或 32 位位图相比,8 位位图的工作方式完全不同,后者没有颜色表,而是每个像素都有实际的 RGB(A) 值。
您遇到的问题很可能是目标像素图与源位图没有相同的颜色表。
实际上我以前从未使用过 8 位位图和调色板,但我认为这很简单:
var
s, t: TBitmap;
y: Integer;
sp, tp: PByte;
x: Integer;
begin
s := TBitmap.Create;
try
s.LoadFromFile('C:\Users\Andreas Rejbrand\Desktop\bitmap.bmp');
Assert(s.PixelFormat = pf8bit);
t := TBitmap.Create;
try
t.PixelFormat := pf8bit;
t.SetSize(s.Width, s.Height);
t.Palette := s.Palette; // <-- Let the new image have the same colour table
for y := 0 to s.Height - 1 do
begin
sp := s.ScanLine[y];
tp := t.ScanLine[y];
for x := 0 to s.Width - 1 do
tp[x] := sp[x];
end;
t.SaveToFile('C:\Users\Andreas Rejbrand\Desktop\bitmap2.bmp');
finally
t.Free;
end;
finally
s.Free;
end;
关于delphi - 如何通过 ScanLine 复制灰度位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378705/
我想将像素从 BMP1 复制到 BMP2,但复制的图像出现乱码。为什么? 注意:输入图像为pf8bit; TYPE TPixArray = array[0..4095] of Byte; PP
我想将像素从 BMP1 复制到 BMP2,但复制的图像出现乱码。为什么? 注意:输入图像为pf8bit; TYPE TPixArray = array[0..4095] of Byte; PP
我正在尝试调整 bufio.ScanLines,以便它知道转义的新行 \\n。 输入: line1 \ continues on line2 预期输出: ["line1 continues on li
目前,我循环播放 Canvas.Pixels[]属性并读取 Canvas 上的每个像素以交换红色/蓝色字节(出于特定原因)。然而,每张图片平均需要 2 秒,而且我有超过 8,000 张图片需要转换(一
我是 C 的新手,这个表示图像的结构让我感到困惑。它用于此 Graphics Gem . 有人可以解释结构的正确实例化和使用,尤其是关于扫描线指针数组吗? typedef unsigned char
请您提供引用以帮助我了解基于扫描线的渲染引擎的工作原理吗? 我想实现一个 2D 渲染引擎,它可以支持基于区域的剪裁、基本形状绘制和抗锯齿填充以及基本变换(透视、旋转、缩放)。我需要优先考虑性能而不是质
我需要使用 PyQt4 访问 qimage 对象中的像素数据。 .pixel() 太慢,因此文档说使用 scanline() 方法。 在 C++ 中,我可以获得 scanline() 方法返回的指针,
问题说明:我有一个矩形且均匀间隔的像素图像,其顶点坐标为 (i,j)、(i+1,j)、(i, j+1)、(i+1, j+1) [i=0,。 ..,m-1; j=0,...,n-1] 和顶点坐标为 (x
在使用 32 位 TBitmap 时,我从 Canvas.Pixels 切换到 ScanLine。 然后我将值设置为红色,却发现它显示为蓝色。 知道为什么吗? 以下是代码摘录: procedure T
我正在尝试使用带有 scanLine() 的 Qt 修改图像方法。此方法返回指向给定行数据的指针。我创建了如何读取行 here .现在,我能够像这样读取所有像素的值: QRgb ** pixels;
Delphi 和 C++ Builder 有一个带有 Scanline 属性的 TBitmap 类,该属性返回位图像素的内存。当我在 BMP 文件的十六进制编辑器中查看时,这似乎有所不同。 我正在尝试
我是一名优秀的程序员,十分优秀!