DragImageBits描述了當您拖動東西時顯示的圖像。其標題由SHDRAGIMAGE描述。
var data = e.Data.GetData("DragImageBits") as MemoryStream;
var buffer = new byte[24];
data.Read(buffer, 0, 24);
int w = buffer[0] + (buffer[1] << 8) + (buffer[2] << 16) + (buffer[3] << 24);
int h = buffer[4] + (buffer[5] << 8) + (buffer[6] << 16) + (buffer[7] << 24);
// Stride accounts for any padding bytes at the end of each row. For 32 bit
// bitmaps there are none, so stride = width * size of each pixel in bytes.
int stride = width * 4;
// x and y is the relative position between the top left corner of the image and
// the mouse cursor.
int x = buffer[8] + (buffer[9] << 8) + (buffer[10] << 16) + (buffer[11] << 24);
int y = buffer[12] + (buffer[13] << 8) + (buffer[14] << 16) + (buffer[15] << 24);
buffer = new byte[stride * h];
// The image is stored upside down, so we flip it as we read it.
for (int i = (h - 1) * stride; i >= 0; i -= stride) data.Read(buffer, i, stride);
BitmapSource.Create(w, h, 96, 96, PixelFormats.Bgra32, null, buffer, stride);
應該仍然使用DragDropHelper來代替更好的兼容性。
+1 - 我用這個代碼的一些不同的答案:http://stackoverflow.com/a/8468171/25216雖然這工作,它可以通過使用BinaryReader簡化。 – 2011-12-12 01:42:03
我在繪製顏色時遇到了麻煩。大多數顏色與原始顏色完美匹配,但白色區域顯示爲灰色? – Karel 2013-03-09 02:44:36