Chrome會將圖像中和24bpp格式剪貼板。將透明度變成黑色。您可以從剪貼板中獲取32bpp格式,但需要處理DIB格式。有沒有內置的是,在System.Drawing中的支持,你需要一點輔助函數進行轉換:
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;
}
使用範例:
protected override void OnPaint(PaintEventArgs e) {
using (var bmp = GetImageFromClipboard()) {
if (bmp != null) e.Graphics.DrawImage(bmp, 0, 0);
}
}
它生產這種屏幕截圖與形式的BackgroundImage屬性設置爲A股的位圖:
![enter image description here](https://i.stack.imgur.com/dNP7M.png)
事實上,它似乎Chrome不居然把有效'Format17'它的剪貼板,也不會MANAG e以編程方式將它放在剪貼板上時粘貼'Format17'。 – Nyerguds