Bildqualität einer Lupe anpassen

Fragen zu Tkinter.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

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?
Benutzeravatar
__blackjack__
User
Beiträge: 14005
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Antworten