私はthis codeを使用して非常に高速なBitmapをスキャンします。PixelFormatがpf8bitの場合、スキャンラインにエラーが表示される
PixelFormat = pf24bitだと私のプログラムは256のイメージカラーでしか動作しません。そのためPixelFormat = pf8bitです。
PixelFormat = pf8bitの場合、このコードはエラーを表示します。走査線は、pf8bit
を処理するために書かれていないため、コードがpf8bit
で失敗した色をチェックし
procedure ReplaceColor(aBitmap: TBitmap; swap1, swap2: TRGBQuad);
var
w, h, k: Integer;
pScanline: pByte;
Red, Green, Blue, palindex: Byte;
PalEntries: array[0..255] of TRGBQuad;
begin
if aBitmap.Palette <> 0 then
GetPaletteEntries(aBitmap.Palette, 0, 255, PalEntries);
for h := 0 to aBitmap.Height - 1 do
begin
pScanline := pByte(aBitmap.Scanline[h]);
for w := 0 to aBitmap.Width - 1 do
begin
Blue:= PalEntries[pScanline^].rgbBlue ;
Red:= PalEntries[pScanline^].rgbRed ;
Green:= PalEntries[pScanline^].rgbGreen ;
if (Blue = swap1.rgbBlue) and (Red = swap1.rgbRed) and
(Green = swap1.rgbGreen) then
begin
Blue := swap2.rgbBlue;
Green := swap2.rgbGreen;
Red := swap2.rgbRed;
end
else if (Blue = swap2.rgbBlue) and (Red = swap2.rgbRed) and
(Green = swap2.rgbGreen) then
begin
Blue := swap1.rgbBlue;
Green := swap1.rgbGreen;
Red := swap1.rgbRed;
end;
Inc(pScanline);
end;
end;
end;
*このコードショーのエラー*に便利です問題の説明ではありません。何**エラー** **表示**ですか?どのように**エラー**を表示しますか?それはコンパイラのエラーですか?ランタイムエラー?それは間違った出力を生成しますか?あなたは問題を説明していないか、意味のある質問をしました。コンピュータ上のコードで何が起きているのかを正確に知ることができます。私たちが座っている場所からのエラーを見ることはできません。あなたが助けを望むなら、それを私たちに明確に説明する必要があります。 –
Access Memory Error – AliReza
私の答えで言われたように、8ビットのビットマップは、走査線のピクセルに色を保存しないでください。別々のカラーパレットに保存され、ピクセルはそのパレットのインデックスになります。カラーを交換する場合は、カラーテーブルを変更するか、インデックス値を変更する必要があります。 –