Yo tampoco encuentro la manera de cambiársela desde el objeto TBitmap, pero podemos hacerlo directamente sobre el archivo. La resolución se guarda en la cabecera del bitmap, así que no tenemos mas que cambiar esos valores en la cabecera.
Algo así:
Código Delphi
[-]
procedure SaveToFileDPI(Bitmap: TBitmap; Filename: String; Rx, Ry: Double);
var
Stream: TMemoryStream;
InfoHeader: BITMAPINFOHEADER;
begin
Bitmap.SaveToFile(Filename);
with TFileStream.Create(Filename,fmOpenReadWrite) do
try
Seek(Sizeof(BITMAPFILEHEADER),soFromBeginning);
Read(InfoHeader,Sizeof(InfoHeader));
InfoHeader.biXPelsPerMeter:= Trunc((Rx * 10000) / 254);
InfoHeader.biYPelsPerMeter:= Trunc((Ry * 10000) / 254);
Seek(Sizeof(BITMAPFILEHEADER),soFromBeginning);
Write(InfoHeader,Sizeof(InfoHeader));
finally
Free;
end;
end;
SaveToFileDPI(Bitmap,'c:\1.bmp',300,300);