Fix transparency in capturePage (#12561)
* Fix transparent window capture. Transparency is preserved and not converted to black pixels anymore * Add test to make sure aplha channel exists in captured image
This commit is contained in:
parent
eca0436f58
commit
6fc819dae1
2 changed files with 26 additions and 0 deletions
|
@ -276,6 +276,9 @@ content::ServiceWorkerContext* GetServiceWorkerContext(
|
||||||
void OnCapturePageDone(const base::Callback<void(const gfx::Image&)>& callback,
|
void OnCapturePageDone(const base::Callback<void(const gfx::Image&)>& callback,
|
||||||
const SkBitmap& bitmap,
|
const SkBitmap& bitmap,
|
||||||
content::ReadbackResponse response) {
|
content::ReadbackResponse response) {
|
||||||
|
// Hack to enable transparency in captured image
|
||||||
|
// TODO(nitsakh) Remove hack once fixed in chromium
|
||||||
|
const_cast<SkBitmap&>(bitmap).setAlphaType(kPremul_SkAlphaType);
|
||||||
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
|
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -442,6 +442,29 @@ describe('BrowserWindow module', () => {
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('preserves transparency', (done) => {
|
||||||
|
w.close()
|
||||||
|
const width = 400
|
||||||
|
const height = 400
|
||||||
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
transparent: true
|
||||||
|
})
|
||||||
|
w.loadURL('data:text/html,<html><body background-color: rgba(255,255,255,0)></body></html>')
|
||||||
|
w.once('ready-to-show', () => {
|
||||||
|
w.show()
|
||||||
|
w.capturePage((image) => {
|
||||||
|
let imgBuffer = image.toPNG()
|
||||||
|
// Check 25th byte in the PNG
|
||||||
|
// Values can be 0,2,3,4, or 6. We want 6, which is RGB + Alpha
|
||||||
|
assert.equal(imgBuffer[25], 6)
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('BrowserWindow.setSize(width, height)', () => {
|
describe('BrowserWindow.setSize(width, height)', () => {
|
||||||
|
|
Loading…
Add table
Reference in a new issue