C# how do you "read" an image programatically? - c#

I dont have a CS background but have worked extensively with C#. Perhaps I would know this answer with a CS background but I'm hoping to get help from all of the smart folks on this site.
Can someone please provide a C# code snippet on how you can programmatically "read" an image with C#? Assume that I have image that is black and white, like a fingerprint. The background can be white or grayscale and the print itself is black. How can I use C# to distinguish between the portions that are part of the image (i.e. the fingerprint) and the background (i.e. white or grayscale)?

You would load the image using the Bitmap class:
http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx
var bitmap = new Bitmap(filename);
You can then "read" the colour of each point using the GetPixel method.
var color = bitmap.GetPixel(x, y);
As for how you interpret the image, for example to determine which parts are a fingerprint, that could involve all sorts of complex image processing algorithms, which aren't really C# specific.

Related

Winforms: Capture part of PDF image to OCR

This is a C# winforms question.
The process I am trying to achieve is the following:
Using AxAcroPDFLib I'm loading a pdf file to the form
I want the user to be able to specify a square on that PDF and create a bmp from it
That bmp will then be loaded to a OCR to become text
What is my issue:
Step 1 and 3 are easy to do, the problem is how to allow the user to draw a square on top of the AxAcroPDFLib for a screenshot.
I already got different ways to draw squares on native winform components, but AxAcroPDFLib does not support mouse down, up, move, etc and paint events.
There is the option to convert the PDF to bitmap and display it on a picturebox and deal with events for drawing the square. Problem with that approach is that my PDF's are usually more than two pages, and I would like to avoid the conversion pdf to bmp due to changes to image quality that will impact on OCR.
I came to think that maybe something that works as the windows snippingtool would do the the job. My application would get the screenshot, temporarily save the image on disk (must be a file for OCR), I would then pass it to the OCR and done. Hard part, I could not think on how to take the screenshot of part of the PDF.
Do anyone here have any suggestion to different components or workarounds to deal with the requirement above? I am using Adobe just because it is simple, but maybe there are other components better suited to handle my requirements? I googled but haven't found any free ones, trying to avoid paid options.
Thanks
At some point in this process, the PDF is going to have to be rasterized in order to be passed to the OCR, so I don't totally understand your objection to converting it to a bitmap. If you're okay with Snipping Tool's behavior, then you must be OK with the quality of the PDF control's PDF->screen rasterization. If that resolution is acceptable, why not just capture the control's content to a Bitmap and let the user draw the selection marquee over that Bitmap?
Here is code I'm using to capture a control's contents to a Bitmap in Windows Forms. One caveat is that this is really a screen capture, so any windows or controls that overlap the control's visible area will be captured in the image.
using (Bitmap b = new Bitmap(width, height))
{
using (Graphics g = Graphics.FromImage(b))
{
Point p1 = myControl.PointToScreen(new Point(0, 0));
g.CopyFromScreen(p1.X, p1.Y, 0, 0, size);
}
// do stuff here with your Bitmap
}

How to WIC Encode a D2D bitmap to png

At the moment I'm programming a paint app in WPF C# and have a problem. I want to draw different shapes and save them as a png/bmp. So right now I'm decoding a bmp to a direct2d bitmap to draw on rendertarget. But my problem is that I don`t know how to save the D2DBitmap as a png because I can not find a encode function...
I am not allowed to use SharpDX so I hope someone can help me with this problem.
Or maybe somebody has another solution for drawing shapes and stuff but NOT in the xml file.
So I managed it by myself.
I created a surfaceRenderTarget that can be painted on and also is shown on Screen.
Then I created a WicBitmapRenderTarget with the same properties and this Rendertarget is easily saveable with a saveToFile method.
So I draw on the surfaceRenderTarget and push every operation to an operationstack and when I click the save button the programm draws the hole stack on the bitMapTarget and saves this.
This is my solution, maybe someone has a better.

WinRT masking image

I'm having a problem with masking an image in WinRT. Basically, what I need to do, is to cut out a puzzle shape out of the base image. I have the puzzle shape as a PNG black and white image, where the shape itself is white and the background black and also as a transparent shape of the puzzle piece. This is actually a port of a iOS app, where they used a CGContextClipToMask with the black and white mask to cut out the puzzle piece.
I tried using the Blit from the WriteableBitmapEx to mask the images, but I never achieved the result I wanted, the closest I got was the correctly cut out shape, but with a black background, instead of nothing. What is the correct way of cutting out this shape? Thanks for all the answers!
Indeed, WinRT/XAML in Windows 8 does not have an OpacityMask implementation of other XAML frameworks. You could use WriteableBitmap to manipulate the pixels, but it's a bit slow, especially on ARM devices. A faster solution is to use Direct2D, which has a FillOpacityMask method built right in. Since SharpDX wraps it nicely for .NET you can do that with C# too.
I don't have code, however the simplest case would be to just open PNG file in Photoshop/GIMP/any online transparency tool and just map black pixels alpha to zero.
Another example would be doing that in code directly,
WriteableBitmapEx has function to change each pixel,
all you have to do, is loop through all black pixels and change alpha to 0.

C# - Drawing top image over background image (alpha channel) - WinForm

I've got this topimage with alpha channel in it and I need to put this image over another background image, while the alpha channel from the top image stays intact obviously.
Now I've seen some tutorials with Canvas, but my project doesn't seem to recognize Canvas.
Anyone got an idea why I cant use Canvas or how to put those 2 images over each other?
Ok, I will try to answer: after loading the image, like this more or less, pseudocode:
Bitmap bmp = new Bitmap("MyCooolSemiTransparentImage.png");
bmp.MakeTransparent(colorHaveToBeRenderedTransparent);
colorHaveToBeRenderedTransparent is a color wich results non transparent after loading it into Bitmap object.
EDIT
if alphachannel is ok, here is a simple tutorial how to draw in image on WinForms:
msdn: DrawImage
Call method provided in yuor forms OnPaint override and you will get what you want.
Hope this helps.
Regards.

C# Winform Image zoom with pixelate

I'm making simple image editor by C# winform.
I'm trouble with make zoom function. in other similar questions, many people simply suggest that 'change the size' such like..
Bitmap newImg = new Bitmap(oldImg, newWidth, newHeight);
But In this way, the picture become blured(is it caused by antialiasing? I don't know well...) I need pixelated zoom Image. Like any other image editor such as Photoshop or paint.net...
I tried also put pixelate function to make mosaic image. result was good but it was too slow!
please help me. How can I make pixelate zoom?
Check out Image resizing in .Net with Antialiasing, this should get you started (I'm not sure but setting SmoothingMode = SmoothingMode.None means no anitaliasing).

Categories

Resources