NSImage skaliert nicht

8

Ich entwickle eine schnelle App, in der ich eine Methode habe, die ein @ 2x-Bild auf ein reguläres skalieren sollte. Das Problem ist, dass es nicht: (

Warum?

%Vor%     
Tobias Timpe 02.10.2012, 20:06
quelle

2 Antworten

10

Sie müssen sehr vorsichtig mit dem Größenattribut eines NSMage sein. Es bezieht sich nicht unbedingt auf die Pixelmaße der BitmapRepresentation, es könnte sich beispielsweise auf die angezeigte Größe beziehen. Ein NSMage kann eine Anzahl von BitmapRepresentations für Verwendung bei verschiedenen Ausgabegrößen haben.

Ebenso ändert das Ändern des Größenattributs eines NSImage die BitmapRepresentations

nicht

Sie müssen also die Größe ermitteln, die Ihr Ausgabebild haben soll, und dann ein neues Bild in dieser Größe mit einer BitmapRepräsentation aus dem Quell-NSMage erstellen.

Diese Größe hängt davon ab, wie Sie Ihr Eingangsbild erhalten haben und was Sie darüber wissen. Wenn Sie beispielsweise sicher sind, dass Ihr Eingabebild nur ein BitmapImageRep aufweist, können Sie diese Art von Objekt (als Kategorie in NSImage) verwenden

%Vor%

Auch wenn Sie eine Anzahl von BitmapImageReps haben, sollte die erste die größte sein, und wenn das die Größe ist, mit der Ihr Retina-Bild erstellt wurde, sollte es die Retina-Größe sein, nach der Sie suchen.

Wenn Sie Ihre endgültige Größe ausgearbeitet haben, können Sie das Bild machen:

%Vor%

}

update

Hier ist eine ausführlichere Version einer Pixelgröße-erhaltenden Kategorie auf NSImage ... nehmen wir an, nichts über das Bild, wie viele imageReps es hat, ob es any bitmapImageReps hat ... Dies liefert die größten Pixelabmessungen, die es finden kann. Wenn es bitMapImageRep Pixeldimensionen nicht finden kann, wird es verwenden, was auch immer es bekommen kann, was höchstwahrscheinlich Bounding Box Dimensionen sein wird (verwendet von eps und pdfs).

NSImage + PixelSize.h

%Vor%

NSImage + PixelSize.m

%Vor%

Sie würden #import "NSImage+PixelSize.h" in Ihrer aktuellen Datei eingeben, um sie zugänglich zu machen.

Mit dieser Bildkategorie und der Methode resize: würden Sie Ihre Methode so ändern:

%Vor%

Das sollte Dinge für Sie beheben (vorausgesetzt, ich habe es nicht in Ihrem Code getestet)

    
foundry 20.12.2012, 19:18
quelle
2

Ich habe das Skript geändert, das ich benutze, um meine Bilder für Sie zu verkleinern:)

%Vor%     
Tieme 20.12.2012 20:24
quelle

Tags und Links