00001 /********************************************************************************** 00002 * Copyright (c) 2003, Christoph Rueegg <opendev@cdrnet.ch> and Matthias Bader * 00003 * All rights reserved. * 00004 * * 00005 * Project Website: http://www.cdrnet.net/projects/painter/ * 00006 * * 00007 * Redistribution and use in source and binary forms, with or without modification,* 00008 * are permitted provided that the following conditions are met: * 00009 * * 00010 * 1. Redistributions of source code must retain the above copyright notice, * 00011 * this list of conditions and the following disclaimer. * 00012 * * 00013 * 2. Redistributions in binary form must reproduce the above copyright notice, * 00014 * this list of conditions and the following disclaimer in the documentation * 00015 * and/or other materials provided with the distribution. * 00016 * * 00017 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * 00018 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * 00021 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * 00022 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * 00023 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * 00026 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF * 00027 * THE POSSIBILITY OF SUCH DAMAGE. * 00028 **********************************************************************************/ 00029 00030 #include "filterdiff.h" 00031 #include <cmath> 00032 00033 DiffFilter::DiffFilter() : ChannelFilter<unsigned char>() 00034 { 00035 } 00036 00037 DiffFilter::~DiffFilter() 00038 { 00039 } 00040 00041 void DiffFilter::OnMouseEvent(const int button, const int state, int x, int y) 00042 { 00043 if(button!=0) 00044 { 00045 return; 00046 } 00047 if(state == 0 && button == 0) 00048 { 00049 ChannelFilter<unsigned char>::Normalize(&x,&y); 00050 unsigned char color = ChannelFilter<unsigned char>::Get(x,y); 00051 for(int x1=0;x1<ChannelFilter<unsigned char>::GetWidth();x1++) 00052 for(int y1=0;y1<ChannelFilter<unsigned char>::GetHeight();y1++) 00053 ChannelFilter<unsigned char>::Set(x1,y1,abs(ChannelFilter<unsigned char>::Get(x1,y1)-color)); 00054 } 00055 } 00056 00057 ChannelFilter<unsigned char>* DiffFilter::EmptyClone() 00058 { 00059 DiffFilter *copy = new DiffFilter(); 00060 copy->SetSubChannel(ChannelFilter<unsigned char>::GetSubChannel()); 00061 return(copy); 00062 } 00063 00064 unsigned char DiffFilter::Get(const int x, const int y) 00065 { 00066 return(ChannelFilter<unsigned char>::Get(x,y)); 00067 } 00068 00069 void DiffFilter::Set(const int x, const int y, const unsigned char val) 00070 { 00071 ChannelFilter<unsigned char>::Set(x,y,val);; 00072 } 00073
1.3-rc2