Solved

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

Posted on 2011-09-23
1
686 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
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

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Video by: Mark
This lesson goes over how to construct ordered and unordered lists and how to create hyperlinks.
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

863 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

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now