![]() |
Multimedia »
General Graphics »
General
Beginner
License: The Code Project Open License (CPOL)
Pixel Addition WatermarkingBy vidyaputraA application that shows how to add pixels to create a visible watermark without using GDI. |
C#, .NET, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
In this article, I would like to explain about a visible watermarking method using pixel addition. I am writing this article because most articles I have read about visible watermarking use GDI (which, I think is complicated). So I thought, why not use simple math, considering that a pixel is a matrix value. In this application, I use Visual Studio 2005 with C#.
A pixel in a digital image is a matrix value ranging between 0 - 255. So, in 1024 x 600 digital image, there will be 1024 x 600 pixels. How does the matrix addition work? Just add the cover image pixel value with the watermark pixel value.
result Pixel = cover Pixel + mark Pixel
To give an opacity option, use a double value as opacity ranging between 0.1 - 1.9, and then you will get:
result Pixel = cover Pixel + (mark Pixel * opacity)
The code in C# for the pixel addition would be like this:
private int pixelVal(int avemark, int pixcover, double opacity)
{
if (pixcover + (avemark * opacity) > 255)
{
return pixcover = 255;
}
else
{
return pixcover = Convert.ToInt32(pixcover + (avemark * opacity));
}
}
And then on the Process button, simply process the whole matrix using a "for" loop. Just like in the code below:
watermarkBmp = (Bitmap)Bitmap.FromFile(openWatermark);
coverBmp = (Bitmap)Bitmap.FromFile(openCover);
resultBmp = null;
int red = 0;
int green = 0;
int blue = 0;
double opacity = Convert.ToDouble(comboBox1.Text);
for (int i = 0; i < watermarkBmp.Height; i++)
{
for (int j = 0; j < watermarkBmp.Width; j++)
{
//kalau watermark terlalu besar, kenapa error?
red = pixelVal(watermarkBmp.GetPixel(i, j).R, coverBmp.GetPixel(i, j).R, opacity);
green = pixelVal(watermarkBmp.GetPixel(i, j).G, coverBmp.GetPixel(i, j).G, opacity);
blue = pixelVal(watermarkBmp.GetPixel(i, j).B, coverBmp.GetPixel(i, j).B, opacity);
coverBmp.SetPixel(i, j, Color.FromArgb(red, green, blue));
}
}
pictureBox2.Width = coverBmp.Width;
pictureBox2.Height = coverBmp.Height;
pictureBox2.Image = coverBmp;
For me, using the matrix addition is much simpler than using GDI. And, it could have more options such as translation etc. Watermarking is fun, because there are many things to explore about it.
The first time I learned about watermarking was when I was working on my thesis about visible and invisible watermarking. But, when I searched for articles and code for visible watermarking, most of them were using GDI (brush, etc.). And, this is my first small version without using GDI.
| You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 17 Feb 2009 Editor: Smitha Vijayan |
Copyright 2009 by vidyaputra Everything else Copyright © CodeProject, 1999-2009 Web20 | Advertise on the Code Project |