Image View zeichnet falsch

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Hallo Leute,

wiederum habe ich ein bis jetzt ungelöstes Problem, nämlich:

Ich habe ein NSImageView, das mir einen 16x16 StatusDot zeichnen soll. Nun kommt es leider vor, dass das Bild (der Dot) manchmal korrekt gezeichnet wird und manchmal nicht "geflippt", also auf dem Kopf. Ich kann mir nicht erklären, wie es dazu kommen kann, denn die Befehle sind mit Sicherheit immer die selben. Meistens wird es am Anfang (nachdem die Applikation gestartet wurde) richtig gezeichnet und sobald ein Menu aufgerufen wird nicht mehr!!

Danke für mögliche Hinweise auf die Lösung oder die Lösung selber

Gruss ppocket
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Manchmal mache ich etwas und mir geht es am nächsten Tag ausgezeichnet. Manchmal nicht.

Wieso kannst du mir das nicht erklären?
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Du bist auch ein Mensch, mit Gefühlen... der Computer aber sollte immer genau das machen, was man ihm sagt. Dass ihm aber immer dasselbe gesagt wird, er aber nicht immer dasselbe tut, ist etwas komisch...

Ich will damit nur sagen, dass dein Vergleich nicht ganz angebracht ist, nicht wahr??

Gruss ppocket
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Der ist absolut angebracht.

Amin mag Dir sagen:

Deine Fehlerbeschreibung ist für Leute, die nicht in Dein Projekt involviert sind, mehr als mangelhaft.
Kein Code, keine Screenshots ... usw.
In der Regel gibt es drei Bs > Behauptung > Begründung > Beweis.

Wer soll Dir mit der jetzige Beschreibung helfen können?
Lade doch mal ein kleines Beispielprojekt hoch, dass den Sachverhalt verdeutlicht.

Viele Grüße
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Du bist auch ein Mensch, mit Gefühlen... der Computer aber sollte immer genau das machen, was man ihm sagt. Dass ihm aber immer dasselbe gesagt wird, er aber nicht immer dasselbe tut, ist etwas komisch...

Ich will damit nur sagen, dass dein Vergleich nicht ganz angebracht ist, nicht wahr??

Gruss ppocket

Nein, ein Computer soll nicht immer bei der gleichen Befehlsfolge das Gleiche machen. Darauf sind auch gerade erst Linuxer hereingefallen
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ich habe ein NSImageView, das mir einen 16x16 StatusDot zeichnen soll. Nun kommt es leider vor, dass das Bild (der Dot) manchmal korrekt gezeichnet wird und manchmal nicht "geflippt", also auf dem Kopf.
....
Danke für mögliche Hinweise auf die Lösung oder die Lösung selber

Es wäre hilfreich, wenn Du den Code für den View mal hier posten würdest.

Bei CIImage ist das ein bekanntes Probelm.

Alex
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Hallo, danke für die Antworten!

Ich poste dir gerne den einzigen Befehl, den es gibt, nämlich: Dem ImageView ein Bild zuweisen, sonst gibts da keinen Code :D Der Rest ist im nib-File. Es passiert übrigens auch, wenn ich dem ImageView direkt per nib eine Bilddatei zuordne...

Aber da es ein bekanntes Problem ist, wurde es nicht gelöst, also muss ich wohl damit leben...

Danke und ein Gruss ppocket
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Aber da es ein bekanntes Problem ist, wurde es nicht gelöst, also muss ich wohl damit leben
Naja, das kann man so immer noch nicht sagen.
Lade doch mal ein Beispiel hoch. Hier raten immer noch alle was Du da baust.

Viele Grüße
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
<imnebelstocher>Benutzt Du das Bild nur innerhalb des NSImageViews, oder noch anderswo?</imnebelstocher>

Hintergrund der Frage: Irgendjemand ent- bzw. flippt Dir ungefragt Dein Bild. Das koennte z.B. das Menue sein, das Du erwaehnst, falls das Bild darin auch vorkommt.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Ich hab mal so eine kleine Beispiel-Applikation gebastelt... aaaaaber nun festgestellt, dass ich damit das Problem nicht rekonstruieren kann, hier funktioniert alles perfekt, obwohl die Sache GENAU so, wie in meiner Applikation abläuft...

@Peter: Das Bild wird jedes Mal - wie du im Code sehen kannst - per [NSImage imageNamed:mad:"..."]; neu geladen, also eine neue, ungebrauchte Instanz erstellt.

Es muss also sonst irgendetwas falsch laufen in meiner App, mal schauen :) Wenn ich nicht weiter weiss, poste ich halt alles hier... obwohl mir das nicht gefällt^^ versteht ihr doch?!?

Gruss ppocket
 

Anhänge

  • ImageViewExample Application.zip
    23,6 KB · Aufrufe: 51
  • ImageViewExample Project.zip
    55,2 KB · Aufrufe: 56

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.478
Wenn es um ein Geheimprojekt geht, das du noch nicht veröffentlichen willst, schick den Problemcode doch den paar Leuten, die sich hier geäußert haben, nach Absprache per PN oder Mail.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
So, das ist doch schon mal ein Schritt. Jetzt kuck genau, was in Deiner App anders ist.

Verändere das Beispiel so lange in Richtung Deiner App, bis das Problem auftaucht.

Alex
 

mad-boy

Cox Orange
Registriert
18.09.07
Beiträge
97
Hallo,

ich bin was Cocoa angeht bisher nur auf dem iPhone unterwegs, deswegen mag die ein oder andere Klasse anders heißen, das Prinzip sollte aber identisch sein: Ich hatte das Problem, als ich einen UIView eine CGImage habe zeichnen lassen. Die Klassen des Cocoa Frameworks besitzen, wie ich dabei rausgefunden habe, ein anderes Koordinaten-System als die C-Klassen. Nämlich genau upsidedown. Ich habe das Problem damals nicht weiter verfolgt sondern mir einfach statt einem CGImage ein UIImage geholt und das Problem war verschwunden, allerdings habe ich gelesen, dass es wohl eine Möglichkeit gibt, die Koordinatensysteme zu flippen, was u.a. wohl von einigen Cocoa Klassen getan wird. Vielleicht zeichnest du hier also einmal vor einem Aufruf einer solchen Klasse und einmal danach...?

Das sind aber auch nur Mutmaßungen.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
mad-boy: Ganz richtig, in diese Richtung geht auch meine Vermutung. Aber wenn der TE seinen Code nicht rausrückt...

Alex
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
@Peter: Das Bild wird jedes Mal - wie du im Code sehen kannst - per [NSImage imageNamed:mad:"..."]; neu geladen, also eine neue, ungebrauchte Instanz erstellt.
Genau das ist ein unzulaessiger Schluss. Aus der NSImage-Dokumentation:

NSImage Class Reference schrieb:
imageNamed:
Returns the NSImage instance associated with the specified name.

[...]

The NSImage class may cache a reference to the returned image object for performance in some cases. However, the class holds onto cached objects only while the object exists. If the image object is subsequently released, either because its retain count was 0 or it was not referenced anywhere in a garbage-collected application, the object may be quietly removed from the cache.
Kurz: Was genau NSImage intern macht, das erzaehlen uns die Apfelmenschen mit voller Absicht nicht, weil sich das wahrscheinlich von OS-Version zu OS-Version auch mal aendern kann, aber es ist in Deinem Fall durchaus anzunehmen, dass immer wieder dieselbe NSImage-Instanz verwendet wird.

Und das kann man ja leicht ueberpruefen und ggf. ausschliessen, indem man mal die Zeiger-Werte vergleicht.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Danke Peter!

Genau das wars! Ich hatte genau dieselben Icons auch in der nebenstehenden Outline gezeichnet. Ich hab die mal ausser Gefecht gesetzt, Problem ade! Dann hab ich nur die grünen zeichnen lassen, nur das grüne machte Probleme! Und ich hab auch die Adressen gecheckt, sind echt dieselben Instanzen, die da verwendet werden!

Die NSCell-Subklasse, welche die Icons zeichnet, flippt die Image-Instanzen, je nach flipping des Outlines (ist immer geflippt!). Wenn ich nachher (nach dem Zeichnen) den Status wieder zurücksetze (also den vorherigen Wert wiederherstelle), ist das Problem weg!

Vielen Dank fürs Ausharren ohne Code und für die Hilfe natürlich :)

Gruss ppocket
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Peter Maurer

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
@Mad-Boy: Das weiss ich sehr wohl, das mit den verschiedenen Koordinatensystemen. Ich flippe die Sache normalerweise immer, ist für mich logischer, Apple macht das ja auch immer! Das Einzige, was ich nicht wusste, ist, dass NSImages gecacht werden können und so, trotz eines neuen Aufrufes, dieselben Instanzen verwendet werden können. Wenn jetzt das Image geflippt wird und das NSImageView (komischerweise) das nicht mehr richtig setzt, ist das Bild dann auf dem Kopf, ist klar!! Darum: Flip vorher abspeichern, flippen & zeichnen, flip zurücksetzen -> Problem gelöst!

danke :)
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Apple macht das wirklich immer so?

Ich bin übrigens ein großer Freund von Apples "mathematischen" Koordinatensystem. Woher kommt denn überhaupt das Koordinatensystem mit 0 oben links? Mutmaßlich einfach aus der Fernsehtechnik, da dort auch Monitore ihren Nullpunkt haben. Das hat man dann vor geraumer Vorzeit einfach im Computer nachgebaut. Wohl weil es leichter zu implementieren war.

Aber in der Wirklichkeit hängt es doch davon ab, was man anzeigen möchte. Bei Text findet man den Nullpunkt oben links ganz natürlich. Man? Araber auch? Chinesen machen den AFAIK auch oben links, schreiben dann aber senkrecht, also um 90 ° gedreht. MAW: Die Schreibrichtung ist wirklich kein Argument, da diese kulturell unterschiedlich ist.

Unten links ist ein einheitliches System, weil es wohl wirklich von allen Mathematikern auf der Welt benutzt wird. Man ist es bloß beim Programmieren nicht gewohnt.