Я хочу назначить данный буфер с битовой картой в формате Mono8 (Monochrome 8 Bits) для битовой карты. Затем я назначаю полученное растровое изображение компоненту TImage, чтобы отобразить его. Изображения являются скриншотами полученного изображения.
Следующий код работает, но кажется немного расточительным:
procedure CopyToBitmapMono824(_Buffer: PByte; _Bmp: TBitmap);
var
y: Integer;
x: Integer;
ScanLine: PdzRgbTripleArray;
begin
for y := 0 to _Bmp.Height - 1 do begin
ScanLine := _Bmp.ScanLine[y];
for x := 0 to _Bmp.Width - 1 do begin
// monochrome: all 3 colors set to the same value
ScanLine[x].Red := _Buffer^;
ScanLine[x].Green := _Buffer^;
ScanLine[x].Blue := _Buffer^;
Inc(_Buffer);
end;
end;
end;
// [...]
fBmp.PixelFormat := pf24Bit;
FBmp.Monochrome := False;
CopyToBitmap(Buffer, fBmp);
Я бы предпочел использовать растровое изображение в формате pf8Bit, которое я пробовал:
procedure CopyToBitmapMono8(_Buffer: PByte; _Bmp: TBitmap);
var
y: Integer;
x: Integer;
ScanLine: PByteArray;
begin
for y := 0 to _Bmp.Height - 1 do begin
ScanLine := _Bmp.ScanLine[y];
for x := 0 to _Bmp.Width - 1 do begin
ScanLine[x] := _Buffer^;
Inc(_Buffer);
end;
end;
end;
// [...]
FBmp.PixelFormat := pf8bit;
FBmp.Monochrome := False; // I also tried Monochrome := true
CopyToBitmapMono8(Buffer, FBmp)
Если MonoChrome имеет значение true, изображение имеет только около 1/4 ожидаемой ширины, остальное - белый.
Если MonoChrome имеет значение false, изображение имеет ожидаемую ширину, но левая 1/4 - монохромная, остальные содержат ложные цвета.
Я явно что-то упускаю, но что?
РЕДАКТИРОВАТЬ: Эффект, что растровое изображение составляет только 1/4 от ожидаемого размера, по-видимому, был побочным эффектом преобразования его в JPEG для сохранения перед его отображением (код, который я не показывал выше, mea culpa). Поэтому проблема была в том, что я не установил монохромную палитру для растрового изображения.