Chrome sao chép hình ảnh vào khay nhớ tạm ở định dạng 24bpp. Mà biến tính minh bạch thành màu đen. Bạn có thể nhận được một định dạng 32bpp trong clipboard nhưng điều đó đòi hỏi phải xử lý định dạng DIB. Không có built-in hỗ trợ cho rằng trong System.Drawing, bạn cần một hàm helper ít mà làm cho việc chuyển đổi: sử dụng
private Image GetImageFromClipboard() {
if (Clipboard.GetDataObject() == null) return null;
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Dib)) {
var dib = ((System.IO.MemoryStream)Clipboard.GetData(DataFormats.Dib)).ToArray();
var width = BitConverter.ToInt32(dib, 4);
var height = BitConverter.ToInt32(dib, 8);
var bpp = BitConverter.ToInt16(dib, 14);
if (bpp == 32) {
var gch = GCHandle.Alloc(dib, GCHandleType.Pinned);
Bitmap bmp = null;
try {
var ptr = new IntPtr((long)gch.AddrOfPinnedObject() + 40);
bmp = new Bitmap(width, height, width * 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb, ptr);
return new Bitmap(bmp);
}
finally {
gch.Free();
if (bmp != null) bmp.Dispose();
}
}
}
return Clipboard.ContainsImage() ? Clipboard.GetImage() : null;
}
mẫu:
protected override void OnPaint(PaintEventArgs e) {
using (var bmp = GetImageFromClipboard()) {
if (bmp != null) e.Graphics.DrawImage(bmp, 0, 0);
}
}
nào sản xuất này màn hình-shot với các hình thức của BackgroundImage bất động sản thiết lập để một bitmap chứng khoán:

Nguồn
2012-06-30 12:34:42
trên thực tế, có vẻ như Chrome không thực sự đặt hợp lệ 'Format17' vào clipboard của nó, nó cũng không phải manag e để dán 'Format17' khi tôi đặt nó vào clipboard theo chương trình. – Nyerguds