00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00032 #include "BorderExtenderCopy.hpp"
00033
00034 using namespace Millie;
00035
00036
00037 BorderExtenderCopy::BorderExtenderCopy()
00038 {}
00039
00040 void BorderExtenderCopy::extend(Image & out,
00041 const Image & in,
00042 int toppadding,
00043 int leftpadding,
00044 int rightpadding,
00045 int bottompadding) const
00046 {
00047 if(out.getNumComponents() != in.getNumComponents())
00048 throw Millie::IllegalArgument("BorderExtenderCopy::extend");
00049
00050 if(toppadding<0 || leftpadding<0 || rightpadding<0 || bottompadding<0)
00051 throw Millie::IllegalArgument("BorderExtenderCopy::extend");
00052
00053
00054 out.resize(in.getWidth() + leftpadding + rightpadding,
00055 in.getHeight() + bottompadding + toppadding);
00056
00057 for(int canal = 0; canal< out.getNumComponents(); canal++)
00058 {
00059
00060 for(int j = 0; j< toppadding; j++)
00061 for(int i = 0; i< leftpadding; i++)
00062 out.setPixel(i,j, canal, in.getPixel(0,0,canal));
00063
00064
00065 for(int j = 0; j< toppadding; j++)
00066 for(int i = leftpadding; i< (in.getWidth() + leftpadding); i++)
00067 out.setPixel(i,j, canal, in.getPixel( i-leftpadding , 0, canal));
00068
00069
00070 for(int j = 0; j< toppadding; j++)
00071 for(int i = (in.getWidth()+ leftpadding); i< out.getWidth(); i++)
00072 out.setPixel(i,j, canal, in.getPixel(in.getWidth()-1, 0, canal));
00073
00074
00075 for(int j = toppadding; j<(in.getHeight()+ toppadding); j++)
00076 for(int i = 0; i<leftpadding; i++)
00077 out.setPixel(i,j, canal, in.getPixel(0, j-toppadding, canal));
00078
00079
00080 for(int j = toppadding; j<(in.getHeight()+ toppadding); j++)
00081 for(int i = (in.getWidth()+ leftpadding); i< out.getWidth(); i++)
00082 out.setPixel(i,j, canal, in.getPixel(in.getWidth()-1, j-toppadding, canal));
00083
00084
00085 for(int j = (in.getHeight()+ toppadding); j< out.getHeight(); j++)
00086 for(int i = 0; i< leftpadding; i++)
00087 out.setPixel(i,j, canal, in.getPixel(0, in.getHeight()-1, canal));
00088
00089
00090 for(int j = (in.getHeight()+ toppadding); j< out.getHeight(); j++)
00091 for(int i = (in.getWidth()+ leftpadding); i< out.getWidth(); i++)
00092 out.setPixel(i,j, canal, in.getPixel(in.getWidth()-1, in.getHeight()-1, canal));
00093
00094
00095 for(int j = (in.getHeight()+ toppadding); j< out.getHeight(); j++)
00096 for(int i = leftpadding; i<(in.getWidth()+ leftpadding); i++)
00097 out.setPixel(i,j, canal, in.getPixel(i-leftpadding, in.getHeight()-1, canal));
00098
00099
00100 for(int j = toppadding; j< (in.getHeight()+ toppadding); j++)
00101 for(int i = leftpadding; i < (in.getWidth() + leftpadding); i++)
00102 out.setPixel(i, j, canal, in.getPixel(i-leftpadding, j-toppadding, canal));
00103
00104
00105 }
00106 }