Hola Amig@s del foro
He estado investigando con respecto a este formato y hacer que delphi lo soporte.
He buscado en foros y he logrado encontrar la librería DLL y la definición de usar la librería que Google proporciona.
He intentado hacer la conversión de un archivo *.BMP hacia *.Webp obteniendo un resultado de BMP(655kb) y WebP(134kb).
el problema que está ocurriendo es que no está respetando los colores de la imagen original. tiene la misma claridad, pero no los mismos colores.
les adjunto una imagen para que vean el resultado. les comparto parte del código y me ayudan con sus sugerencias o que puede estar haciéndose erradamente.
Definición de función que usa la librería:
Código Delphi
[-]
{$if defined(Win32)}
LIB_WEBP = 'libwebp.dll';
{$elseif defined(Win64)}
LIB_WEBP = 'libwebp64.dll';
function WebPEncodeBGR(const bgr: PByte; width, height, stride: Integer; quality_factor: Single; var output: PByte): Cardinal; cdecl; external LIB_WEBP;
procedimiento que hace la conversión: (Se carga la imagen bmp al objeto TIMAGE)
Código Delphi
[-]
imgConvertir: TImage;
procedure TForm1.btnConvertirWebPClick(Sender: TObject);
var
src, dst: TBytes;
data, pb: PByte;
iy, wdt, hgt, datasize, stride: Integer;
bmp: TBitmap;
begin
bmp := TBitmap.Create;
bmp.PixelFormat := pf24bit;
bmp.Width := imgConvertir.Picture.Width;
bmp.Height := imgConvertir.Picture.Height;
bmp.Canvas.Draw(0, 0, imgConvertir.Picture.Graphic);
stride := NativeInt(bmp.ScanLine[1]) - NativeInt(bmp.ScanLine[0]);
datasize := WebPEncodeRGB(bmp.ScanLine[0], bmp.Width, bmp.Height, stride, 100, data);
SetLength(src, datasize);
MoveMemory(src, data, datasize);
TFile.WriteAllBytes(ExtractFilePath(Application.ExeName)+'\tiger.webp', src);
bmp.Free;
¿Qué sugerencia u opiniones? ¿capaz se está enviando los parámetros de forma errada?
Es muy interesante usar este formato liviano para los desarrollos web. Les dejo un link para que vean su información:
https://developers.google.com/speed/webp