Solved

How to copy Clip of an Image to Clipboard C# Code in a WPF Application

Posted on 2011-09-23
1
783 Views
Last Modified: 2012-05-12
This is the Code the Works in Window Forms Application (Non-WPF)
"TiffImage" is a picturebox Control
public Bitmap ImageClip;

pivate void CopyBlock()
{
    Point topLeft = new Point(Math.Min(pointStart.X, pointEnd.X), Math.Min(pointStart.Y, pointEnd.Y));
    int clipWidth = Math.Abs(pointEnd.X - pointStart.X + 1),
        clipHeight = Math.Abs(pointEnd.Y - pointStart.Y + 1);

    ImageClip = new Bitmap(clipWidth, clipHeight);
    Graphics Gra = Graphics.FromImage(ImageClip);
    Gra.DrawImage(TiffImage.Image, new Rectangle(0, 0, clipWidth, clipHeight),
                                           topLeft.X, topLeft.Y, clipWidth, clipHeight, GraphicsUnit.Pixel);
    Gra.Dispose();

    Clipboard.SetDataObject(ImageClip);
}

What is the Code to do this in WFP Application
0
Comment
Question by:GEGAmbato
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
1 Comment
 

Accepted Solution

by:
GEGAmbato earned 0 total points
ID: 36595402
I have found the Solution to this problem.

To Clip a portion of an Image to the Clipboard you Crop the Image to a New Image.

            Image ClippedImage = new Image();
            ClippedImage.Width = clipWidth;

            CroppedBitmap cb = new CroppedBitmap((BitmapSource)imageLog.Source,
                                                  new Int32Rect( (int)Math.Round(topLeft.X),  (int)Math.Round(topLeft.Y),
                                                                  (int)Math.Round(clipWidth),  (int)Math.Round(clipHeight)));
            ClippedImage.Source = cb;
           

My problem was I was reading large Tiff File. 852.48 X 25957.44 was the test image size, one of the smaller ones.
The image DpiX = 200, DpiY = 200  Format = BlackWhite
PixelWidth = 1776 PixelHeight = 54078 BitsPerPixel = 1

To correct the problem of the cropped Image not matching what was selected I had to get the Image DpiX and DpiY  to 96.

This is the Code to Decode the Tiff File to, change Dpi to 96, and fit into an Image Control.

            Stream streamLog = new FileStream(pFile, FileMode.Open, FileAccess.Read, FileShare.Read);
            TiffBitmapDecoder decoder = new TiffBitmapDecoder(streamLog, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
            BitmapSource logToBitMap = decoder.Frames[0];

            int pixWidth = logToBitMap.PixelWidth;
            int pixHeight = logToBitMap.PixelHeight;
            int bitPerPix = logToBitMap.Format.BitsPerPixel;
            PixelFormat pixFormat = logToBitMap.Format;

            int stride = pixWidth * bitPerPix;
            byte[] pixData = new byte[stride * pixHeight];
            logToBitMap.CopyPixels(pixData, stride, 0);

            BitmapSource bmpSource = BitmapSource.Create(pixWidth, pixHeight, 96, 96, pixFormat, null, pixData, stride);
            imageLog.Source = bmpSource;
            imageLog.Stretch = Stretch.Fill;

 Hope this help someone else, this took over a week to find a solution.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question