[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
Solved

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

Posted on 2011-09-23
Medium Priority
854 Views
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
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
1 Comment

Accepted Solution

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.

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

Question has a verified solution.

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

We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
###### Suggested Courses
Course of the Month14 days, 8 hours left to enroll