Seite 1 von 1

Bildqualität einer Lupe anpassen

Verfasst: Donnerstag 16. Juli 2020, 18:01
von DMD-OS
Hallo Leute.
Ich habe verschiedene Bilder, die in einem Canvas durchgeschaltet werden können.
Auf die verschieden Bilder kann einen Lupe angewendet werden.
Anregung: https://stackoverflow.com/questions/543 ... vas-widget habe ich mir hier geholt.

Ich habe eine feste Größe für das Canvas, in welchem das Bild/die Bilder insgesamt zu sehen ist.
Wenn ich mit der Maus hinein zoome, wird der Bildausschnitt gezoomed, die Qualität leidet im Zoomausschnitt aber etwas.
Ich versuche nun, die Bildqualität für den gezoomten Bereich zu erhöhen, weiß aber nicht, wie ich das anpacken soll.
Die Images die ich verwende, haben alle ca. 2MB. Die sind doch genug Pixel, um es scharf anzeigen zu lassen! :(

Codeausschnitt gibs hier:

Code: Alles auswählen

    def wheel(self, event):
        if self.image:
            if event.delta > 0:
                if self.zoom_cycle != 4:
                    self.zoom_cycle += 1
            elif event.delta < 0:
                if self.zoom_cycle != 0:
                    self.zoom_cycle -= 1
            self.motion(event)

    def leave(self, _):
        self.zoom_cycle = 0
        if self.zoom_img_id:
            self.image_canvas.delete(self.zoom_img_id)

    def motion(self, event):
        if self.zoom_img_id:
            self.image_canvas.delete(self.zoom_img_id)
        if self.zoom_cycle != 0:
            tmp = None
            w, h = 120, 120
            x, y = event.x, event.y
            zoom_1 = 56
            zoom_2 = 40
            zoom_3 = 25
            zoom_4 = 16
            if self.zoom_cycle == 1:
                tmp = self.image.crop(
                    (x - zoom_1, y - zoom_1, x + zoom_1, y + zoom_1)).resize((w, h), Image.ANTIALIAS)
            elif self.zoom_cycle == 2:
                tmp = self.image.crop(
                    (x - zoom_2, y - zoom_2, x + zoom_2, y + zoom_2)).resize((w, h), Image.ANTIALIAS)
            elif self.zoom_cycle == 3:
                tmp = self.image.crop(
                    (x - zoom_3, y - zoom_3, x + zoom_3, y + zoom_3)).resize((w, h), Image.ANTIALIAS)
            elif self.zoom_cycle == 4:
                tmp = self.image.crop(
                    (x - zoom_4, y - zoom_4, x + zoom_4, y + zoom_4)).resize((w, h), Image.ANTIALIAS)
            self.zoom_img = ImageTk.PhotoImage(tmp)
            self.zoom_img_id = self.image_canvas.create_image(x, y-15, image=self.zoom_img)
Also meine Frage: Kann man den Zoombereich genauer ausgeben lassen?

Re: Bildqualität einer Lupe anpassen

Verfasst: Freitag 17. Juli 2020, 13:23
von __blackjack__
@DMD-OS: Was heisst die Bildqualität leidet etwas? Du musst halt aufpassen, dass das zoomen nicht über 100% geht. Alles darüber leidet natürlich denn es müssen Pixel ”erfunden” werden die es in den Bilddaten gar nicht gibt.