diff --git a/Bildfaltung/ClampingBorderBehavior.py b/Bildfaltung/ClampingBorderBehavior.py
index bf23ee22b464998b839cebe26475a6a15f4a5ba5..62635edddd70fead5c95b05d43467808365e9323 100644
--- a/Bildfaltung/ClampingBorderBehavior.py
+++ b/Bildfaltung/ClampingBorderBehavior.py
@@ -12,10 +12,15 @@ def clamp(num, min_value, max_value):
 
 class ClampingBorderBehavior(BorderBehavior):
 
+
     def getPixelValue(self, i, j, image):
 
         try:
-            return image[i][j]
+            if i < 0 or j < 0:
+                clamped_i = clamp(i, 0, image.shape[1] - 1)
+                clamped_j = clamp(j, 0, image.shape[0] - 1)
+            else:
+                return image[i][j]
         except IndexError:
             clamped_i = clamp(i, 0, image.shape[1]-1)
             clamped_j = clamp(j, 0, image.shape[0]-1)
diff --git a/Bildfaltung/Image.py b/Bildfaltung/Image.py
index 29666e46870d19c1c74da6f622e5262d516aa49b..08331d7b6667f518fbd23872b102102f557c1b5f 100644
--- a/Bildfaltung/Image.py
+++ b/Bildfaltung/Image.py
@@ -1,9 +1,21 @@
 from numpy import array
 
 
-
 class Image:
 
+
+    def __init__(self):
+        self.__imageData = None
+
+    def get_imageData(self):
+        return self.__imageData
+
+    def set_imageData(self, value):
+        self.__imageData = value
+        return self.__imageData
+
+
+
     def readFromFile(self, filename):
         try:
             f = open(filename, "r")
@@ -51,16 +63,23 @@ class Image:
             for j in range(width):
                 temp.append(elem[i * width + j])
             img.append(temp)
-        return (array(img))
+            Image.set_imageData(self, array(img))
+
+        return self.__imageData
 
 
-    def writeToFile(self, arr, filename):
+    def writeToFile(self, filename):
+
+        try:
+            f = open(filename, "w+")
+        except IOError:
+            print("Cannot open file")
+            exit()
 
-        f = open(filename, "w+")
         maxVal = 255
         width = 0
         height = 0
-        for row in arr:
+        for row in self.__imageData:
             height = height + 1
             width = len(row)
 
@@ -70,10 +89,29 @@ class Image:
 
         for i in range(height):
             for j in range(width):
-                f.write(str(arr[i][j]) + ' ')
+                f.write(str(self.__imageData[i][j]) + ' ')
             f.write('\n')
 
 
+    def get_filtered_pixel(self, i, j, imageData, kernel, borderBehavior):
+        kernel_half = int((len(kernel) - 1) / 2)
+        final_pixel_value = 0
+
+        for k in range(-kernel_half, kernel_half + 1):
+            for l in range(-kernel_half, kernel_half + 1):
+                kernel_factor = kernel[k + kernel_half][l + kernel_half]
+                current_pixel = borderBehavior.getPixelValue(i + k, j + l, self.__imageData)
+                current_pixel = int(current_pixel)
+                final_pixel_value += current_pixel * kernel_factor
+        return int(final_pixel_value)
+
+    def convolve(self, kernel, borderBehavior):
+
+        rows = len(self.__imageData)
+        cols = len(self.__imageData[0])
+
+        for i in range(cols):
+            for j in range(rows):
+                self.__imageData[i][j] = Image.get_filtered_pixel(self, i, j, self.__imageData, kernel, borderBehavior)
+        return self.__imageData
 
-    def convolve(kernel, borderBehavior):
-        pass
\ No newline at end of file
diff --git a/Bildfaltung/KernelFactory.py b/Bildfaltung/KernelFactory.py
index 0901e12c0542267468fb173ac355eef01ba14310..ba95fcf1398af18ae9060097c6dd996ba28383d2 100644
--- a/Bildfaltung/KernelFactory.py
+++ b/Bildfaltung/KernelFactory.py
@@ -16,9 +16,14 @@ class KernelFactory:
 
     @staticmethod
     def createBoxFilter(size):
-        value = 1/(size*size)
-        boxFilter = [[value for x in range(size)] for y in range(size)]
+        if size % 2 != 0:
+            value = 1/(size*size)
+            boxFilter = [[value for x in range(size)] for y in range(size)]
+
+            return boxFilter
+
+        else:
+            return("Invalid boxfilter size!")
 
-        return boxFilter
 
 
diff --git a/Bildfaltung/ZeroPaddingBorderBehavior.py b/Bildfaltung/ZeroPaddingBorderBehavior.py
index 48b7aeb05baf3b17d4352936d58df7cef7c87f4e..ffad14335ee719bb5f814ff9844fe5c4ee952062 100644
--- a/Bildfaltung/ZeroPaddingBorderBehavior.py
+++ b/Bildfaltung/ZeroPaddingBorderBehavior.py
@@ -8,6 +8,8 @@ Bildes, wie in Abbildung 2 oben dargestellt, den Wert 0 zurückgibt
 class ZeroPaddingBorderBehavior(BorderBehavior):
 
     def getPixelValue(self, i, j, image):
+        if i < 0 or j < 0:
+            return 0
         try:
             return image[i][j]
         except IndexError:
diff --git a/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc b/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc
index 43a303511bdcafa64288b3725d9c70978953e005..3e2af1ba63f1049df8c3fe6266fba80de1cab06d 100644
Binary files a/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc and b/Bildfaltung/__pycache__/ClampingBorderBehavior.cpython-310.pyc differ
diff --git a/Bildfaltung/__pycache__/Image.cpython-310.pyc b/Bildfaltung/__pycache__/Image.cpython-310.pyc
index 18dfef5b00460505f83972e439800460fa9536cb..a639824500f52eb117399f062d533a2342b6b91c 100644
Binary files a/Bildfaltung/__pycache__/Image.cpython-310.pyc and b/Bildfaltung/__pycache__/Image.cpython-310.pyc differ
diff --git a/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc b/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc
index 66ad584ce838b1fa84b7a5fbd9875f888ed4136a..eeb46e94b76f8390fa1b55b2d6ec33056a2dc2c3 100644
Binary files a/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc and b/Bildfaltung/__pycache__/KernelFactory.cpython-310.pyc differ
diff --git a/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc b/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc
index 36c1eb5b7789b3435a960975f3d6ae3990801e06..99cb2365be530d6e66b2e94ac7e09bbf5cd168d7 100644
Binary files a/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc and b/Bildfaltung/__pycache__/ZeroPaddingBorderBehavior.cpython-310.pyc differ
diff --git a/Bildfaltung/main.py b/Bildfaltung/main.py
index 61e12d0ab1bd127f86c9663ad3067b403f591263..f5e1e52f611a0e0a36b77dd7c8c21a6d7e5c12ca 100644
--- a/Bildfaltung/main.py
+++ b/Bildfaltung/main.py
@@ -1,26 +1,35 @@
-from ClampingBorderBehavior import ClampingBorderBehavior
 from Image import Image
-import numpy as np
 
 from KernelFactory import KernelFactory
 from ZeroPaddingBorderBehavior import ZeroPaddingBorderBehavior
+from ClampingBorderBehavior import ClampingBorderBehavior
+
 
+'''RELATIVE PFADE!'''
 path = "E:/Downloads/test.pgm"
 path1 = "E:/Downloads/test1.pgm"
-array = np.random.randint(256, size=(4, 4))
+path2 ="E:/Downloads/test2.pgm"
 
+#array = np.random.randint(256, size=(4, 4))
 
-def clamp(num, min_value, max_value):
-    num = max(min(num, max_value), min_value)
-    return num
 
 if __name__ == '__main__':
-    print(array)
-    #img = Image()
-    #img.writeToFile(array, path1)
-    #print(img.readFromFile(path1))
-    test = ClampingBorderBehavior()
-    print(test.getPixelValue(1, 4, array))
+
+    img = Image()
+    print(img.readFromFile(path1))
+    img.writeToFile(path2)
+    clamping = ClampingBorderBehavior()
+    zero = ZeroPaddingBorderBehavior()
+    kernel = KernelFactory.createHorizontalPrewittKernel()
+    img.readFromFile(path1)
+    print(img.convolve(kernel, clamping))
+
+
+
+
+
+
+