mirror of
https://github.com/Dadido3/noita-mapcap.git
synced 2024-11-22 21:17:33 +00:00
Update capture method
- Capture hWnd HDC directly (Window can be behind other windows) - Update README.md
This commit is contained in:
parent
478a6262e8
commit
c78a8b56ae
32
README.md
32
README.md
@ -1,14 +1,14 @@
|
|||||||
# Noita MapCapture addon [![Build Status](https://travis-ci.com/Dadido3/noita-mapcap.svg?branch=master)](https://travis-ci.com/Dadido3/noita-mapcap)
|
# Noita MapCapture addon [![Build Status](https://travis-ci.com/Dadido3/noita-mapcap.svg?branch=master)](https://travis-ci.com/Dadido3/noita-mapcap)
|
||||||
|
|
||||||
Addon that captures the map and saves it as image.
|
Addon that captures a Noita world and saves it as image.
|
||||||
|
|
||||||
![missing image](images/example1.png)
|
![missing image](images/example1.png)
|
||||||
|
|
||||||
A resulting image with 3.8 gigapixels can be [seen here](https://easyzoom.com/image/203402) (Warning: Spoilers).
|
A resulting image with nearly 3.8 gigapixels can be [seen here](https://easyzoom.com/image/223556) (Warning: Spoilers).
|
||||||
|
|
||||||
## System requirements
|
## System requirements
|
||||||
|
|
||||||
- Windows Vista, ..., 10. (64 bit version)
|
- Windows Vista, ..., 10. (64 bit OS for stitching)
|
||||||
- A few GB of free drive space.
|
- A few GB of free drive space.
|
||||||
- 4 or more GB of RAM for gigapixel images. (But it works with less as long as the software doesn't run out of virtual memory)
|
- 4 or more GB of RAM for gigapixel images. (But it works with less as long as the software doesn't run out of virtual memory)
|
||||||
- A processor.
|
- A processor.
|
||||||
@ -28,11 +28,11 @@ A resulting image with 3.8 gigapixels can be [seen here](https://easyzoom.com/im
|
|||||||
- Or press `>> Start capturing full map <<` to capture the whole map.
|
- Or press `>> Start capturing full map <<` to capture the whole map.
|
||||||
7. The screen will jump around, and the game will take screenshots automatically.
|
7. The screen will jump around, and the game will take screenshots automatically.
|
||||||
- Screenshots are saved in `.../Noita/mods/noita-mapcap/output/`.
|
- Screenshots are saved in `.../Noita/mods/noita-mapcap/output/`.
|
||||||
- Don't cover the game window.
|
- Don't move the game window outside of screen space. You can cover it with other windows, and continue using your PC.
|
||||||
- Don't move the game window outside of screen space.
|
- Don't minimize the game window.
|
||||||
- If you need to pause, use the ESC menu.
|
- If you need to pause, use the ESC menu.
|
||||||
- Also, make sure that the console window isn't selected, as you will end up with screenshots of the console instead of the game. You can select and use any other window while it's capturing screenshots, though.
|
- Also, make sure that the console window isn't selected, as you will end up with screenshots of the console instead of the game. You can select and use any other window while it's capturing screenshots, though.
|
||||||
8. When you think you are done, close noita.
|
8. When you think you are done, close Noita.
|
||||||
9. Start `.../Noita/mods/noita-mapcap/bin/stitch/stitch.exe`.
|
9. Start `.../Noita/mods/noita-mapcap/bin/stitch/stitch.exe`.
|
||||||
- Use the default values to create a complete stitch.
|
- Use the default values to create a complete stitch.
|
||||||
- It will take the screenshots from the `output` folder.
|
- It will take the screenshots from the `output` folder.
|
||||||
@ -50,8 +50,8 @@ Here is a step by step explanation how to do so:
|
|||||||
|
|
||||||
``` xml
|
``` xml
|
||||||
<MagicNumbers
|
<MagicNumbers
|
||||||
VIRTUAL_RESOLUTION_X="840"
|
VIRTUAL_RESOLUTION_X="1024"
|
||||||
VIRTUAL_RESOLUTION_Y="840"
|
VIRTUAL_RESOLUTION_Y="1024"
|
||||||
...
|
...
|
||||||
>
|
>
|
||||||
```
|
```
|
||||||
@ -61,12 +61,12 @@ Here is a step by step explanation how to do so:
|
|||||||
``` xml
|
``` xml
|
||||||
<Config
|
<Config
|
||||||
...
|
...
|
||||||
backbuffer_height="840"
|
backbuffer_height="1024"
|
||||||
backbuffer_width="840"
|
backbuffer_width="1024"
|
||||||
internal_size_h="840"
|
internal_size_h="1024"
|
||||||
internal_size_w="840"
|
internal_size_w="1024"
|
||||||
window_h="840"
|
window_h="1024"
|
||||||
window_w="840"
|
window_w="1024"
|
||||||
fullscreen="0"
|
fullscreen="0"
|
||||||
...
|
...
|
||||||
>
|
>
|
||||||
@ -75,7 +75,7 @@ Here is a step by step explanation how to do so:
|
|||||||
If that file doesn't exist do step 5, and come back here, and continue from step 3.
|
If that file doesn't exist do step 5, and come back here, and continue from step 3.
|
||||||
|
|
||||||
4. Patch your `.../Noita/noita_dev.exe` with [Large Address Aware](https://www.techpowerup.com/forums/threads/large-address-aware.112556/) or a similar tool.
|
4. Patch your `.../Noita/noita_dev.exe` with [Large Address Aware](https://www.techpowerup.com/forums/threads/large-address-aware.112556/) or a similar tool.
|
||||||
This is optional, but it prevents crashes from noita running out of memory.
|
This is optional, but it prevents crashes from Noita running out of memory.
|
||||||
|
|
||||||
5. Start `.../Noita/noita_dev.exe`.
|
5. Start `.../Noita/noita_dev.exe`.
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ If you use `noita_dev.exe`, you can enable the debug mode by pressing `F5`. Once
|
|||||||
|
|
||||||
You can capture in a different resolution if you want or need to. If you do so, you have to adjust some values inside of the mod.
|
You can capture in a different resolution if you want or need to. If you do so, you have to adjust some values inside of the mod.
|
||||||
|
|
||||||
The following two formulae have to be true:
|
The following two equations have to be true:
|
||||||
|
|
||||||
![CAPTURE_PIXEL_SIZE = SCREEN_RESOLUTION_* / VIRTUAL_RESOLUTION_*](https://latex.codecogs.com/png.latex?%5Cinline%20%5Cdpi%7B120%7D%20%5Clarge%20%5Cbegin%7Balign*%7D%20%5Ctext%7BCAPTURE%5C_PIXEL%5C_SIZE%7D%20%26%3D%20%5Cfrac%7B%5Ctext%7BSCREEN%5C_RESOLUTION%5C_X%7D%7D%7B%5Ctext%7BVIRTUAL%5C_RESOLUTION%5C_X%7D%7D%5C%5C%20%5Ctext%7BCAPTURE%5C_PIXEL%5C_SIZE%7D%20%26%3D%20%5Cfrac%7B%5Ctext%7BSCREEN%5C_RESOLUTION%5C_Y%7D%7D%7B%5Ctext%7BVIRTUAL%5C_RESOLUTION%5C_Y%7D%7D%20%5Cend%7Balign*%7D)
|
![CAPTURE_PIXEL_SIZE = SCREEN_RESOLUTION_* / VIRTUAL_RESOLUTION_*](https://latex.codecogs.com/png.latex?%5Cinline%20%5Cdpi%7B120%7D%20%5Clarge%20%5Cbegin%7Balign*%7D%20%5Ctext%7BCAPTURE%5C_PIXEL%5C_SIZE%7D%20%26%3D%20%5Cfrac%7B%5Ctext%7BSCREEN%5C_RESOLUTION%5C_X%7D%7D%7B%5Ctext%7BVIRTUAL%5C_RESOLUTION%5C_X%7D%7D%5C%5C%20%5Ctext%7BCAPTURE%5C_PIXEL%5C_SIZE%7D%20%26%3D%20%5Cfrac%7B%5Ctext%7BSCREEN%5C_RESOLUTION%5C_Y%7D%7D%7B%5Ctext%7BVIRTUAL%5C_RESOLUTION%5C_Y%7D%7D%20%5Cend%7Balign*%7D)
|
||||||
|
|
||||||
|
@ -89,8 +89,12 @@ Procedure Worker(*Dummy)
|
|||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
ProcedureDLL Capture(px.i, py.i)
|
ProcedureDLL Capture(px.i, py.i)
|
||||||
Protected rect.RECT
|
Protected hWnd.l = GetProcHwnd()
|
||||||
|
If Not hWnd
|
||||||
|
ProcedureReturn #False
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Protected rect.RECT
|
||||||
If Not GetRect(@rect)
|
If Not GetRect(@rect)
|
||||||
ProcedureReturn #False
|
ProcedureReturn #False
|
||||||
EndIf
|
EndIf
|
||||||
@ -101,27 +105,27 @@ ProcedureDLL Capture(px.i, py.i)
|
|||||||
EndIf
|
EndIf
|
||||||
|
|
||||||
; Get DC of whole screen
|
; Get DC of whole screen
|
||||||
screenDC = GetDC_(#Null)
|
windowDC = GetDC_(hWnd)
|
||||||
If Not screenDC
|
If Not windowDC
|
||||||
FreeImage(imageID)
|
FreeImage(imageID)
|
||||||
ProcedureReturn #False
|
ProcedureReturn #False
|
||||||
EndIf
|
EndIf
|
||||||
|
|
||||||
hDC = StartDrawing(ImageOutput(imageID))
|
hDC = StartDrawing(ImageOutput(imageID))
|
||||||
If Not hDC
|
If Not hDC
|
||||||
|
ReleaseDC_(hWnd, windowDC)
|
||||||
FreeImage(imageID)
|
FreeImage(imageID)
|
||||||
ReleaseDC_(#Null, screenDC)
|
|
||||||
ProcedureReturn #False
|
ProcedureReturn #False
|
||||||
EndIf
|
EndIf
|
||||||
If Not BitBlt_(hDC, 0, 0, rect\right-rect\left, rect\bottom-rect\top, screenDC, rect\left, rect\top, #SRCCOPY) ; After some time BitBlt will fail, no idea why. Also, that's moments before noita crashes.
|
If Not BitBlt_(hDC, 0, 0, rect\right-rect\left, rect\bottom-rect\top, windowDC, 0, 0, #SRCCOPY) ; After some time BitBlt will fail, no idea why. Also, that's moments before noita crashes.
|
||||||
FreeImage(imageID)
|
|
||||||
ReleaseDC_(#Null, screenDC)
|
|
||||||
StopDrawing()
|
StopDrawing()
|
||||||
|
ReleaseDC_(hWnd, windowDC)
|
||||||
|
FreeImage(imageID)
|
||||||
ProcedureReturn #False
|
ProcedureReturn #False
|
||||||
EndIf
|
EndIf
|
||||||
StopDrawing()
|
StopDrawing()
|
||||||
|
|
||||||
ReleaseDC_(#Null, screenDC)
|
ReleaseDC_(hWnd, windowDC)
|
||||||
|
|
||||||
LockMutex(Mutex)
|
LockMutex(Mutex)
|
||||||
; Check if the queue has too many elements, if so, wait. (Simulate go's channels)
|
; Check if the queue has too many elements, if so, wait. (Simulate go's channels)
|
||||||
@ -149,10 +153,10 @@ EndProcedure
|
|||||||
;Capture(123, 123)
|
;Capture(123, 123)
|
||||||
;Delay(1000)
|
;Delay(1000)
|
||||||
|
|
||||||
; IDE Options = PureBasic 5.71 LTS (Windows - x64)
|
; IDE Options = PureBasic 5.72 (Windows - x64)
|
||||||
; ExecutableFormat = Shared dll
|
; ExecutableFormat = Shared dll
|
||||||
; CursorPosition = 140
|
; CursorPosition = 90
|
||||||
; FirstLine = 94
|
; FirstLine = 77
|
||||||
; Folding = --
|
; Folding = --
|
||||||
; EnableThread
|
; EnableThread
|
||||||
; EnableXP
|
; EnableXP
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user