2016-06-22 11 views
1

Ich frage mich, was der beste Weg wäre, die „Leinwand“ ein UIImage zu trimmen (so ziemlich wie jedes Bild-Editor erlaubt es heraus)Trim Transparenz eines UIImage

Example

nun die vorherige Beispiel ist kein einziges UIImage. Es sind eigentlich 2 UIViews. Es würde also ausreichen, den Superview gegen die Blue Box zu beschneiden, aber ich denke, dass ich den bestmöglichen Weg dafür suche. Vorausgesetzt, es könnte mehrere blaue Kästchen in der "Leinwand" geben.

Gibt es einen schnelleren Weg als durch jedes Pixel zu gehen?

Danke!

Antwort

0

Ok, ich war dumm. Die Vereinigung der Subviews ist alles was ich wirklich brauchte, also ist es nur eine einfache Schleife über die Subviews und eine CGRect Union gegen ihre Frames.

0

Wenn ich algorithmisch darüber nachdenke, würde ich nein sagen. Sie müssen das Pixel finden, das sich am weitesten links, rechts, oben und unten erstreckt. Wenn Sie nicht jedes Pixel aus jeder Richtung betrachten, könnten Sie nicht transparente Pixel verpassen.

Sie können Dinge beschleunigen, wenn Sie herausfinden, wie Sie Ihr Bild in den Speicher mappen und dann direkt in den Speicher indexieren, anstatt eine Funktion auf hoher Ebene zu verwenden, die Pixel abruft. Ich würde vorschlagen, von oben nach unten zu suchen (was sequentielle Speicherzugriffe wären), bis Sie ein nicht klares Pixel finden. Dann suche vom Ende des Bildes rückwärts, was dir den untersten Pixel geben würde.

Sie möchten dann Ihre Suche von jeder Seite beschränken, um nur beim ersten nicht transparenten Pixel von oben und bei dem letzten nicht transparenten Pixel unten zu suchen.

Für alles andere als ein sehr großes Bild sollte dies einen Bruchteil einer Sekunde dauern.

+0

Danke für die Info Duncan, ich habe die Frage aktualisiert, um das eigentliche Problem widerzuspiegeln. Angesichts dessen, dass es auf diese Weise viel einfacher sein kann – raulriera