1 (изменено: DD, 2020-04-10 05:28:54)

Тема: AHK: Корректное отображение в GUI бинаризированных изображений

Как корректно отобразить в GUI бинаризированное изображение больших форматов — такое, как по ссылке https://yadi.sk/d/eeZqGGw6FQRS3Q? Чтобы оно выглядело примерно так, как в стандартном средстве просмотра Windows — пропорционально и без искажений, так как даже точное указание размеров не помогает —

gui, -dpiscale
gui, -caption +resize
gui, add, picture, h700 vmypic, %A_Desktop%\bse2_ocred_17.tif
gui, show
return

guisize:
/*
;изменение размеров картинки в GUI без сохранения пропорций
GuiControl, Move, mypic, % "w" . A_GuiWidth . " h" . A_GuiHeight
winset redraw
*/

;изменение размеров картинки в GUI с сохранением пропорций
GuiControl, Move, mypic, % "w" . A_GuiWidth . " h" . A_GuiWidth
winmove, A,,,, A_GuiWidth, A_GuiWidth
winset redraw
return

2

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Через GDI+ можно:

CtrlHeight := 700

pToken := Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile(A_Desktop . "\bse2_ocred_17.tif")
Gdip_GetImageDimensions(pBitmap, Width, Height)
CtrlWidth := Width/Height*CtrlHeight
pNewBitmap := Gdip_CreateBitmap(CtrlWidth, CtrlHeight)
G := Gdip_GraphicsFromImage(pNewBitmap)
Gdip_SetInterpolationMode(G, HighQualityBicubic := 7)
Gdip_SetSmoothingMode(G, AntiAlias := 4)
Gdip_DrawImage(G, pBitmap, 0, 0, CtrlWidth, CtrlHeight, 0, 0, Width, Height)
hBitmap := Gdip_CreateHBITMAPFromBitmap(pNewBitmap)
Gdip_DisposeImage(pNewBitmap)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

Gui, Margin, 0, 0
Gui, Add, Pic,, HBITMAP:%hBitmap%
Gui, Show
Return

GuiClose:
   ExitApp
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

3

Re: AHK: Корректное отображение в GUI бинаризированных изображений

А как бы высоту "CtrlHeight := 700" задавать в процентах — 70% от высоты экрана?

4

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Высота экрана в переменной A_ScreenHeight.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Как в проценты перевести?

MsgBox % A_ScreenHeight * (70 - A_ScreenHeight/100)

6

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Ну это нерешаемая задача.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Ну разве со второй попытки удалось) —

MsgBox % (70 * A_ScreenHeight//100)

8

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Не пойму, как использовать код вместе с GuiControl? То есть, когда сначала выводится первая страница, а потом в цикле, в зависимости от содержимого переменной page — в GUI подгружаются другие страницы:


CtrlHeight := (90 * A_ScreenHeight//100)

pToken := Gdip_Startup()
pBitmap := Gdip_CreateBitmapFromFile("E:\SCANz\00128.tif")
Gdip_GetImageDimensions(pBitmap, Width, Height)
CtrlWidth := Width/Height*CtrlHeight
pNewBitmap := Gdip_CreateBitmap(CtrlWidth, CtrlHeight)
G := Gdip_GraphicsFromImage(pNewBitmap)
Gdip_SetInterpolationMode(G, HighQualityBicubic := 7)
Gdip_SetSmoothingMode(G, AntiAlias := 4)
Gdip_DrawImage(G, pBitmap, 0, 0, CtrlWidth, CtrlHeight, 0, 0, Width, Height)
hBitmap := Gdip_CreateHBITMAPFromBitmap(pNewBitmap)
Gdip_DisposeImage(pNewBitmap)
Gdip_DisposeImage(pBitmap)
Gdip_DeleteGraphics(G)
Gdip_Shutdown(pToken)

Gui, -DPIScale
Gui, -Caption +AlwaysOnTop +HWNDhWin  +Lastfound 
Gui, Margin, 0, 0
Gui, Add, Pic, h%CtrlHeight% vGuiPic, HBITMAP:%hBitmap%

oSM := ComObjCreate("com.sun.star.ServiceManager")

loop
{
sleep 1

global pic_ext
global pic_pth

   oDesk := oSM.createInstance("com.sun.star.frame.Desktop")
   page := oDesk.CurrentComponent.CurrentController.ViewCursor.getPage
   if (oldpage != page) {
      oldpage := page
      oDesk.CurrentComponent.CurrentController.ViewSettings.ZoomType := 2


      Gui, Show, NA
      GuiControl, , GuiPic, E:\SCANz\%page%.tif
   }
}
return

9

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Вместе с GuiControl никак. Нужно удалить прежний hBitmap, затем получить новый тем же способом, потом установить его на картинку с помощью STM_SETIMAGE.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10 (изменено: DD, 2020-04-13 22:31:20)

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Будет ли это вести себя как с GuiControl, или окно будет мелькать? С "Gui Destroy" — мелькает.

11

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Да не, не должно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Корректное отображение в GUI бинаризированных изображений

teadrinker пишет:

Нужно удалить прежний hBitmap, затем получить новый тем же способом, потом установить его на картинку с помощью STM_SETIMAGE.

Тут про это? — http://forum.script-coding.com/viewtopi … 30#p132530

13

Re: AHK: Корректное отображение в GUI бинаризированных изображений

Частично.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder