Pregunta

Actualmente, enojo el Canvas.Pixels[] propiedad y lea cada píxel en un lienzo para intercambiar bytes rojos/azules (por razones específicas). Sin embargo, toma un promedio de 2 segundos por imagen, y tengo más de 8,000 imágenes que necesito para convertir (durante la noche). Entiendo que puedo usar un método de ScanLine para lograr esto mucho más rápido, pero no sé nada sobre ScanLine - Es un nivel mucho más bajo de codificación del que me siento cómodo. ¿Cuál es la forma más rápida de lograr esto? Estoy dispuesto a esperar un tiempo para que esto se ejecute, pero aún así sería bueno si pudiera cortar ese tiempo a la mitad o más.

En este momento, este es el procedimiento que 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 adicional: Una conversión inicial de más de 8,000 imágenes es el primer paso de por qué necesito esto. Sin embargo, también usaré lo mismo en nuestro software para convertir automáticamente cualquier imagen en el lugar, según sea necesario. Entonces, un convertidor de terceros no funcionará, porque no puedo distribuir esto a nuestros clientes.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top