`nativeImage.getBitmap()` allows accessing raw memory after it is freed.

```js
const { nativeImage } = require('electron')

const img = nativeImage.createFromDataURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYlWNgAAIAAAUAAdafFs0AAAAASUVORK5CYII=')
const bitmap = img.getBitmap()
console.log(bitmap)
setTimeout(() => {
  gc()
  console.log(bitmap)
}, 1000)
```

The above example produces the following output on my machine:

```
<Buffer 00 00 00 00>
<Buffer 50 b8 41 05>
```

The 2nd log is just an arbitrary chunk of memory. It's random each time I run the program.
shell/common/api/electron_api_native_image.cc
float scale_factor = GetScaleFactorFromOptions(args);
  const SkBitmap bitmap =
      image_.AsImageSkia().GetRepresentation(scale_factor).GetBitmap();
  SkImageInfo info =
      SkImageInfo::MakeN32Premul(bitmap.width(), bitmap.height());
  auto array_buffer =
      v8::ArrayBuffer::New(args->isolate(), info.computeMinByteSize());
  auto backing_store = array_buffer->GetBackingStore();
  if (bitmap.readPixels(info, backing_store->Data(), info.minRowBytes(), 0,
                        0)) {
    return node::Buffer::New(args->isolate(), array_buffer, 0,
                             info.computeMinByteSize())
        .ToLocalChecked();
  }
  return node::Buffer::New(args->isolate(), 0).ToLocalChecked();
}
v8::Local<v8::Value> NativeImage::ToJPEG(v8::Isolate* isolate, int quality) {
  std::vector<unsigned char> output;
  gfx::JPEG1xEncodedDataFromImage(image_, quality, &output);
  if (output.empty())
    return node::Buffer::New(isolate, 0).ToLocalChecked();
  return node::Buffer::Copy(isolate,
                            reinterpret_cast<const char*>(&output.front()),
                            output.size())
      .ToLocalChecked();
}
std::string NativeImage::ToDataURL(gin::Arguments* args) {