Domanda

Attualmente, ho fatto il ciclo Canvas.Pixels[] Proprietà e leggi ogni pixel su una tela per scambiare byte rosso/blu (per motivi specifici). Tuttavia, ci vogliono in media 2 secondi per foto e ho oltre 8.000 foto che devo convertire (durante la notte). Capisco di poter usare un metodo di ScanLine per farlo molto più velocemente, ma non so nulla ScanLine - È un livello molto più basso di codifica di quanto mi sento a mio agio. Qual è il modo più veloce per raggiungere questo obiettivo? Sono disposto ad aspettare un po 'di tempo per far funzionare, ma sarebbe comunque bello se potessi tagliare quel tempo a metà o più.

In questo momento, questa è la procedura che uso:

procedure SwapBytes(var Bmp: TBitmap);
var
  X, Y: Integer;
  R, G, B: Byte;
  C: TColor;
begin
  for Y := 0 to Bmp.Height - 1 do begin
    for X := 0 to Bmp.Width - 1 do begin
      C:= Bmp.Canvas.Pixels[X,Y];
      R:= GetRValue(C);
      G:= GetGValue(C);
      B:= GetBValue(C);
      Bmp.Canvas.Pixels[X,Y]:= RGB(B, G, R)
    end;
  end;
end;

Nota aggiunta: Una conversione iniziale di oltre 8.000 immagini è il primo passo del perché ne ho bisogno. Tuttavia, utilizzerò anche la stessa cosa nel nostro software per convertire automaticamente qualsiasi immagine sul posto, se necessario. Quindi un convertitore di terze parti non funzionerà, perché non posso distribuirlo ai nostri clienti.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top