[magick-users] Magick++: Change image colors

Patrick Husson patrick.husson at comcast.net
Sun Feb 24 18:21:30 PST 2008


Hi,

I am writing a simple c++ program that hides data in a PNG image by 
replacing insignificant bits with bits from a message on a linux box 
using the most recent release of ImageMagick. However, using the 
functions outlined in the Magick++ tutorial doesn't seem to modify the 
image.

Let's say I want to hide the number of bits I am going d to use to hide 
data in the first red pixel byte in the image.

Bits per byte used: 1
Red1 = 0 //read from the image
Red2 = 1 //modifed value that should replace the original red value

To do this, I read the color of the first pixel and then get the red value
//x=0,y=0
Color firstPix = original.pixelColor(x,y); //original is the image
unsigned char redVal = firstPix.redQuantum(); //MaxRGB = 255

After doing operations, redVal becomes the value I want (1) and then it 
is written
firstPix.redQuantum(modRedVal);

Then the rest of the image is read row by row (y staying the same)
x++;

However, a program that reads the value from the modifed image shows 
that the
values haven't changed:

Color firstPix = image.pixelColor(x,y); //(0,0);
unsigned char redVal = firstPix.redQuantum();

output with cout << (int) redVal
Red 1  = 0

which gives the wrong number of bits to use:
BitsUsed = 0
.
I've also tried using the PixelPacket approach, but this creates a black 
bar wheredata is being hidden. This shows that the image is being 
modified, but not correctly. The image I'm wor king with right now must 
be modified because its filesize is different from before.

Any help would be greatly appreciated in solving the problem.
Thanks,
Patrick


More information about the Magick-users mailing list