Странное VB. net масштабирование растровых изображений - PullRequest
0 голосов
/ 02 мая 2020

Как часть более крупного инструмента, я работаю, отображая фрагменты растрового изображения в картинке. В моем текущем тестовом примере я хочу взять фрагмент растрового изображения 200x200 и отобразить его в картинном блоке 200x200 (клиентская область). Код работает, но я обнаружил, что на самом деле я получаю 600x600 пикселей из растрового изображения в картинке. Все это работает на мониторе 4K, и я подозреваю, что причиной является масштабирование на основе dpi. Я захочу использовать это масштабирование, чтобы разрешить масштабирование, но я не понимаю, почему это вообще происходит сейчас.

Вот код - src_rect и dest_rect идентичны, оба 200x200 и этот вариант DrawImage не должен масштабироваться сам по себе:

Public Overrides Sub Draw_Data(Pbox As PictureBox, Src_Rect As Rectangle, Dst_Rect As Rectangle)
    ''Pbox is the destination picturbox:
    Dim bm As New Bitmap(Pbox.ClientSize.Width, Pbox.ClientSize.Height)
    Dim gr As Graphics = Graphics.FromImage(bm) 'So GR relates to drawing destination.

    gr.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
    gr.SmoothingMode = Drawing2D.SmoothingMode.None
    gr.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic 

    '' Bitmap is the underlying data, a subset of which should be shown:
    gr.DrawImage(Bitmap, Dst_Rect, Src_Rect, GraphicsUnit.Pixel)
    Pbox.Image = bm
End Sub

Я играл с различными настройками gr. *, а также со свойствами picturebox, пытаясь сделать что-нибудь разумное, но Я всегда получаю один и тот же результат. Если это проблема «разрешения» растрового изображения, это странно, потому что исходное растровое изображение (по крайней мере для меня, концептуально) это просто массив пикселей. Казалось бы, отображение подмножества 200x200 из этого в растровое изображение 200x200, используемое в картинке, будет взаимно однозначным. Кто-нибудь видит, чего мне не хватает? Если есть какое-то масштабирование, которое я должен применить, я, безусловно, могу это сделать, но мне нужно было бы каким-то образом по крайней мере измерить тип странного масштабирования, которое происходит, прежде чем я смогу компенсировать его.

...