Я пытаюсь увеличить изображение на веб-странице, загруженной в элемент управления .Net WebBrowser.
Например, есть изображение с (100,100)
при 100% увеличении. Теперь я хочу установить масштабирование до 200% и сделать изображение в верхнем левом углу элемента управления WebBrowser.
Это почти работает. Если точка находится на левой стороне экрана, это работает. Но если точка находится справа от экрана, новые рассчитанные точки не верны.
У всегда правильно. Только Х доставляет мне проблемы.
Кто-нибудь знает, как ScrollTo связан с текущим коэффициентом масштабирования. Или это также связано с другими переменными? Я подозреваю, что проблема также в адаптации веб-страницы, связанной с размером экрана. (при масштабировании удаляет левый и правый край веб-страницы, которая не содержит никакой информации. После этого она расширяет содержимое). Мне нужно истинное масштабирование, когда масштабирование влияет только на содержимое, а не на макет. При масштабировании рефлоу не происходит.
public class MyBrowser : WebBrowser
private int _zoom = 100;
public int Zoom
{
set
{
_zoom = value;
//perform zoom
object pvaIn = _zoom;
try
{
this._axIWebBrowser2.ExecWB(
OLECMDID.OLECMDID_OPTICAL_ZOOM,
OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
ref pvaIn,
IntPtr.Zero);
}
catch (Exception)
{
throw;
}
}
get
{
return _zoom;
}
}
private Point GetCurrentScroll()
{
int scrollX = this.Document.GetElementsByTagName("HTML")[0].ScrollLeft;
int scrollY = this.Document.GetElementsByTagName("HTML")[0].ScrollTop;
return new Point(scrollX, scrollY);
}
public void ZoomOnPoint(int x, int y, int zoomFactor)
{
int currentZoom = this.Zoom;
Point currentScroll = GetCurrentScroll();
//Set new values
this.Zoom = newZoom;
this.Document.Window.ScrollTo(
currentScroll.X + ((x * currentZoom) / zoomFactor), //X is sometimes correct, mostly on the rightside of the screen
currentScroll.Y + y); //Y is correct
}
}