예제 #1
0
 public static void copyToClipBoard(Expr expr, Image image)
 {
     string[] s = new string[1];
     s[0] = FileUtility.FullPath(expr);
     DataObject dataObject = new DataObject();
     dataObject.SetData(DataFormats.FileDrop, s);
     dataObject.SetImage(image);
     Clipboard.SetDataObject(dataObject);
 }
예제 #2
0
		public void TestImage ()
		{
			DataObject d = new DataObject ();
			Image i = new Bitmap (16, 16);
			
			d.SetImage (i);

			Assert.AreEqual (false, d.ContainsAudio (), "A1");
			Assert.AreEqual (false, d.ContainsFileDropList (), "A2");
			Assert.AreEqual (true, d.ContainsImage (), "A3");
			Assert.AreEqual (false, d.ContainsText (), "A4");
			Assert.AreEqual (false, d.ContainsText (TextDataFormat.CommaSeparatedValue), "A5");

			Assert.AreSame (i, d.GetImage (), "A6");
		}
예제 #3
0
		public static void SetClipboardData(ISurface surface) {
			DataObject dataObject = new DataObject();

			// This will work for Office and most other applications
			//ido.SetData(DataFormats.Bitmap, true, image);

			MemoryStream dibStream = null;
			MemoryStream dibV5Stream = null;
			MemoryStream pngStream = null;
			Image imageToSave = null;
			bool disposeImage = false;
			try {
				SurfaceOutputSettings outputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
				// Create the image which is going to be saved so we don't create it multiple times
				disposeImage = ImageOutput.CreateImageFromSurface(surface, outputSettings, out imageToSave);
				try {
					// Create PNG stream
					if (config.ClipboardFormats.Contains(ClipboardFormat.PNG)) {
						pngStream = new MemoryStream();
						// PNG works for e.g. Powerpoint
						SurfaceOutputSettings pngOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
						ImageOutput.SaveToStream(imageToSave, null, pngStream, pngOutputSettings);
						pngStream.Seek(0, SeekOrigin.Begin);
						// Set the PNG stream
						dataObject.SetData(FORMAT_PNG, false, pngStream);
					}
				} catch (Exception pngEX) {
					LOG.Error("Error creating PNG for the Clipboard.", pngEX);
				}

				try {
					if (config.ClipboardFormats.Contains(ClipboardFormat.DIB)) {
						using (MemoryStream tmpBmpStream = new MemoryStream()) {
							// Save image as BMP
							SurfaceOutputSettings bmpOutputSettings = new SurfaceOutputSettings(OutputFormat.bmp, 100, false);
							ImageOutput.SaveToStream(imageToSave, null, tmpBmpStream, bmpOutputSettings);

							dibStream = new MemoryStream();
							// Copy the source, but skip the "BITMAPFILEHEADER" which has a size of 14
							dibStream.Write(tmpBmpStream.GetBuffer(), BITMAPFILEHEADER_LENGTH, (int)tmpBmpStream.Length - BITMAPFILEHEADER_LENGTH);
						}

						// Set the DIB to the clipboard DataObject
						dataObject.SetData(DataFormats.Dib, true, dibStream);
					}
				} catch (Exception dibEx) {
					LOG.Error("Error creating DIB for the Clipboard.", dibEx);
				}

				// CF_DibV5
				try {
					if (config.ClipboardFormats.Contains(ClipboardFormat.DIBV5)) {
						// Create the stream for the clipboard
						dibV5Stream = new MemoryStream();

						// Create the BITMAPINFOHEADER
						BITMAPINFOHEADER header = new BITMAPINFOHEADER(imageToSave.Width, imageToSave.Height, 32);
						// Make sure we have BI_BITFIELDS, this seems to be normal for Format17?
						header.biCompression = BI_COMPRESSION.BI_BITFIELDS;
						// Create a byte[] to write
						byte[] headerBytes = BinaryStructHelper.ToByteArray<BITMAPINFOHEADER>(header);
						// Write the BITMAPINFOHEADER to the stream
						dibV5Stream.Write(headerBytes, 0, headerBytes.Length);

						// As we have specified BI_COMPRESSION.BI_BITFIELDS, the BitfieldColorMask needs to be added
						BitfieldColorMask colorMask = new BitfieldColorMask();
						// Make sure the values are set
						colorMask.InitValues();
						// Create the byte[] from the struct
						byte[] colorMaskBytes = BinaryStructHelper.ToByteArray<BitfieldColorMask>(colorMask);
						Array.Reverse(colorMaskBytes);
						// Write to the stream
						dibV5Stream.Write(colorMaskBytes, 0, colorMaskBytes.Length);

						// Create the raw bytes for the pixels only
						byte[] bitmapBytes = BitmapToByteArray((Bitmap)imageToSave);
						// Write to the stream
						dibV5Stream.Write(bitmapBytes, 0, bitmapBytes.Length);

						// Set the DIBv5 to the clipboard DataObject
						dataObject.SetData(FORMAT_17, true, dibV5Stream);
					}
				} catch (Exception dibEx) {
					LOG.Error("Error creating DIB for the Clipboard.", dibEx);
				}
				
				// Set the HTML
				if (config.ClipboardFormats.Contains(ClipboardFormat.HTML)) {
					string tmpFile = ImageOutput.SaveToTmpFile(surface, new SurfaceOutputSettings(OutputFormat.png, 100, false), null);
					string html = getHTMLString(surface, tmpFile);
					dataObject.SetText(html, TextDataFormat.Html);
				} else if (config.ClipboardFormats.Contains(ClipboardFormat.HTMLDATAURL)) {
					string html;
					using (MemoryStream tmpPNGStream = new MemoryStream()) {
						SurfaceOutputSettings pngOutputSettings = new SurfaceOutputSettings(OutputFormat.png, 100, false);
						// Do not allow to reduce the colors, some applications dislike 256 color images
						// reported with bug #3594681
						pngOutputSettings.DisableReduceColors = true;
						// Check if we can use the previously used image
						if (imageToSave.PixelFormat != PixelFormat.Format8bppIndexed) {
							ImageOutput.SaveToStream(imageToSave, surface, tmpPNGStream, pngOutputSettings);
						} else {
							ImageOutput.SaveToStream(surface, tmpPNGStream, pngOutputSettings);
						}
						html = getHTMLDataURLString(surface, tmpPNGStream);
					}
					dataObject.SetText(html, TextDataFormat.Html);
				}
			} finally {
				// we need to use the SetDataOject before the streams are closed otherwise the buffer will be gone!
				// Check if Bitmap is wanted
				if (config.ClipboardFormats.Contains(ClipboardFormat.BITMAP)) {
					dataObject.SetImage(imageToSave);
					// Place the DataObject to the clipboard
					SetDataObject(dataObject, true);
				} else {
					// Place the DataObject to the clipboard
					SetDataObject(dataObject, true);
				}
				
				if (pngStream != null) {
					pngStream.Dispose();
					pngStream = null;
				}

				if (dibStream != null) {
					dibStream.Dispose();
					dibStream = null;
				}
				if (dibV5Stream != null) {
					dibV5Stream.Dispose();
					dibV5Stream = null;
				}
				// cleanup if needed
				if (disposeImage && imageToSave != null) {
					imageToSave.Dispose();
				}
			}
		}
예제 #4
0
 private void DraggableIcon_ItemDrag(object sender, ItemDragEventArgs e)
 {
     try
     {
         using (var tsf = new TemporarySaveFile(this))
         {
             DataObject obj = new DataObject();
             if (DraggableIcon.Items[0].Text.StartsWith("text/"))
             {
                 string data_ = new StreamReader(tsf.data).ReadToEnd();
                 obj.SetText(data_, DraggableIcon.Items[0].Text == "text/html" ? TextDataFormat.Html : TextDataFormat.UnicodeText);
             }
             else if (DraggableIcon.Items[0].Text.StartsWith("image/"))
             {
                 var data_ = new Bitmap(tsf.data);
                 obj.SetImage(data_);
             }
             else
                 obj.SetData(tsf.data);
             tsf.data.Close();
             obj.SetData(DataFormats.FileDrop, true, new String[] { tsf.tempfilename });
             disable_scrolling = true;
             try
             {
                 DraggableIcon.DoDragDrop(obj, DragDropEffects.All);
             }
             finally
             {
                 disable_scrolling = false;
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(this, "Error when dragging file: " + ex.ToString(), "Error from BEurtle", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
예제 #5
0
        //Bitmapをクリップボードに保存
        public Boolean GetPict2Clip()
        {
            if (kinect.IsRunning==false)
            {
                StartKinect(kinect);
            }

            using (ColorImageFrame colorFrame=kinect.ColorStream.OpenNextFrame(100))
            {
                if (colorFrame == null)
                {
                    return false;
                }

                byte[] colorPixel = new byte[colorFrame.PixelDataLength];
                colorFrame.CopyPixelDataTo(colorPixel);

                //ピクセルデータをビットマップに変換
                Bitmap bitmap =
                new Bitmap(kinect.ColorStream.FrameWidth,
                           kinect.ColorStream.FrameHeight,
                           PixelFormat.Format32bppRgb);

                Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

                BitmapData data = bitmap.LockBits(rect, ImageLockMode.WriteOnly,
                    PixelFormat.Format32bppRgb);

                Marshal.Copy(colorPixel, 0, data.Scan0, colorPixel.Length);

                bitmap.UnlockBits(data);

                //クリップボードに保存
                DataObject dataobj = new DataObject();
                dataobj.SetImage(bitmap);
                Clipboard.SetDataObject(dataobj, true);

                return true;
            }
        }
예제 #6
0
 private DataObject doCopy()
 {
     DataObject obj = new DataObject();
     obj.SetText(charEditor.CurrentChar.ToDB());
     obj.SetImage(charEditor.CurrentChar.ToBitmap());
     obj.SetData(charEditor.CurrentChar);
     return obj;
 }
예제 #7
0
        public void CopySelection()
        {
            Clipboard.Clear();
            if (SelectionCount == 0)
                return;
            DataObject cdo = new DataObject();

            int minX = 0;
            int minY = 0;
            int maxX = 0;
            int maxY = 0;
            string[] internalData = new string[SelectionCount + 1];
            minX = int.MaxValue;
            minY = int.MaxValue;
            foreach (object v_loopVariable in selectedObjects) {
                v = v_loopVariable;
                RECT r = v.GetOuterBounds();
                minX = Math.Min(minX, r.Left);
                minY = Math.Min(minY, r.Top);
                maxX = Math.Max(maxX, r.Right);
                maxY = Math.Max(maxY, r.Bottom);
            }
            Point minPoint = default(Point);
            Bitmap bmp = new Bitmap(maxX - minX, maxY - minY, Imaging.PixelFormat.Format32bppPArgb);
            Graphics g = Graphics.FromImage(bmp);
            g.Clear(Color.White);
            g.TranslateTransform(-minX, -minY);
            for (i = 0; i <= SelectionCount - 1; i++) {
                var _with1 = selectedObjects[i];
                _with1.isSelected = false;
                _with1.DrawObject(g);
                _with1.isSelected = true;
                internalData[i] = _with1.ToHtml();
            }
            g.Dispose();
            cdo.SetData("Bitmap", true, bmp.Clone);

            cdo.SetData("ScreenGrabCollageItemList", false, internalData);

            if (SelectionCount == 1) {
                switch (GetSelectionType()) {
                    case "VTextbox":
                        cdo.SetText(((VTextbox)GetFirstSelectedObject()).Text);
                        break;
                    case "VImage":
                        cdo.SetImage(((VImage)GetFirstSelectedObject()).img);
                        break;
                }
            }

            Clipboard.SetDataObject(cdo, true);
        }