remove black borders from PrintWindow

This commit is contained in:
KingKDot
2026-04-02 21:51:23 -05:00
parent 5ce3fcfd50
commit d82370362f
@@ -1613,10 +1613,82 @@ func drawHVNCWindow(hdcScreen, hwnd uintptr, bounds image.Rectangle, target []by
buf := unsafe.Slice((*byte)(entry.bits), winW*winH*4)
winStride := winW * 4
interLeft := maxInt(winLeft, bounds.Min.X)
interTop := maxInt(winTop, bounds.Min.Y)
interRight := minInt(winRight, bounds.Max.X)
interBottom := minInt(winBottom, bounds.Max.Y)
effTop, effLeft, effBottom, effRight := 0, 0, winH, winW
topFound := false
for y := 0; y < winH; y++ {
rowBase := y * winStride
for x := 0; x < winW; x++ {
off := rowBase + x*4
if buf[off]|buf[off+1]|buf[off+2] != 0 {
effTop = y
topFound = true
break
}
}
if topFound {
break
}
}
if !topFound {
return false
}
for y := winH - 1; y > effTop; y-- {
rowBase := y * winStride
found := false
for x := 0; x < winW; x++ {
off := rowBase + x*4
if buf[off]|buf[off+1]|buf[off+2] != 0 {
found = true
break
}
}
if found {
effBottom = y + 1
break
}
}
leftFound := false
for x := 0; x < winW; x++ {
for y := effTop; y < effBottom; y++ {
off := y*winStride + x*4
if buf[off]|buf[off+1]|buf[off+2] != 0 {
effLeft = x
leftFound = true
break
}
}
if leftFound {
break
}
}
for x := winW - 1; x > effLeft; x-- {
found := false
for y := effTop; y < effBottom; y++ {
off := y*winStride + x*4
if buf[off]|buf[off+1]|buf[off+2] != 0 {
found = true
break
}
}
if found {
effRight = x + 1
break
}
}
effWinLeft := winLeft + effLeft
effWinTop := winTop + effTop
effWinRight := winLeft + effRight
effWinBottom := winTop + effBottom
interLeft := maxInt(effWinLeft, bounds.Min.X)
interTop := maxInt(effWinTop, bounds.Min.Y)
interRight := minInt(effWinRight, bounds.Max.X)
interBottom := minInt(effWinBottom, bounds.Max.Y)
if interRight <= interLeft || interBottom <= interTop {
return false
}