Tôi muốn ứng dụng WPF của tôi là mục tiêu thả và tôi muốn có thể kéo hình ảnh từ bất kỳ trang web nào.Nhận một hình ảnh được kéo từ trang Web đến cửa sổ WPF
Khi một hình ảnh được kéo từ một trang web, có vẻ như nó ở định dạng "DragImageBits", có thể được deserialized để nhập ShDragImage. (Xem phần dưới cùng của câu hỏi về cách tôi đã xác định nó)
Làm cách nào để chuyển đổi hình ảnh này thành hình ảnh WPF?
Đây là nỗ lực hiện tại của tôi. (Nếu ai biết cách chính xác để làm desirialization, tôi là tất cả tai)
private void UserControl_Drop(object sender, System.Windows.DragEventArgs e)
{
string[] formats = data.GetFormats();
// DragImageBits
if (formats.Contains("DragImageBits"))
{
MemoryStream imageStream = data.GetData("DragImageBits") as MemoryStream;
// Now I'm deserializing this, the only way I know how
imageStream.Seek(0, SeekOrigin.Begin);
BinaryReader br = new BinaryReader(imageStream);
ShDragImage shDragImage;
shDragImage.sizeDragImage.cx = br.ReadInt32();
shDragImage.sizeDragImage.cy = br.ReadInt32();
shDragImage.ptOffset.x = br.ReadInt32();
shDragImage.ptOffset.y = br.ReadInt32();
shDragImage.hbmpDragImage = new IntPtr(br.ReadInt32());
shDragImage.crColorKey = br.ReadInt32();
var systemDrawingBitmap = System.Drawing.Bitmap.FromHbitmap(shDragImage.hbmpDragImage);
Tại thời điểm này tôi nhận được một ngoại lệ kiểu System.Runtime.InteropServices.ExternalException
, với thông điệp đơn giản là .
Có ai biết tôi nên làm gì không?
Và đây là định nghĩa lớp hỗ trợ. Tôi đã sao chép chúng từ this blog entry.
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct Win32Point
{
public int x;
public int y;
}
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct Win32Size
{
public int cx;
public int cy;
}
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct ShDragImage
{
public Win32Size sizeDragImage;
public Win32Point ptOffset;
public IntPtr hbmpDragImage;
public int crColorKey;
}
Tôi đang gặp cùng một vấn đề - Tôi đã tìm thấy rằng cả Firefox và IE9 cũng cung cấp một định dạng bitmap (DIB) thiết bị độc lập. Trong trường hợp điều này có sẵn, không cần phải sử dụng WebClient để tải xuống tệp, vì chúng tôi có quyền truy cập vào tệp ở định dạng quen thuộc (bitmap). Firefox cũng cho thấy định dạng 'FileDrop', nhưng trong trường hợp phân tích cú pháp html và sử dụng định dạng đệ trình, có thể tải xuống các đối tượng có thể không nhất thiết là hình ảnh – funseiki
Điều này giúp tôi rất nhiều. Cảm ơn vì đăng. Regex không khớp với nhiều liên kết hình ảnh hợp lệ. Tôi đã tìm thấy @ "] + src =" "([^" "] *)" "" hoạt động tốt hơn một chút. –
Bạn là một phao cứu sinh thực sự. Nếu những người khác như tôi muốn kéo hình ảnh trực tiếp từ hình ảnh của google, hãy kiểm tra trên UriString nếu nó bắt đầu bằng dữ liệu '", những chuỗi đó chứa dữ liệu đã và không nên tải xuống (từ [câu hỏi này] (http : //stackoverflow.com/q/25748858/3410196)) –