2011-06-04 9 views
6

Estoy trabajando en el dibujo de botones personalizados/campos de texto con NSDrawNinePartImage. Corto una imagen en nueve partes en código y la dibujo en un rect con NSDrawNinePartImage.NSDrawNinePartImage huecos

Lamentablemente, estoy recibiendo algunas lagunas en el patrón de dibujo. Pensé que tenía algo que ver con mi código de corte, pero los guardé como imágenes de donde los corté, y todos se ven bien (incluso los puse juntos y se veían bien). Algunos de los casos en los que lo uso funcionan bien aunque algunos usan las mismas imágenes.

Estoy bastante seguro de que todo se reduce al dibujo real.

¿Conoces alguna NSGraphicsContext u otra configuración que pudiera afectarla u otra cosa que pueda estar causando esto?

Con lagunas

With gaps

sin lagunas

Without gaps

+0

me he dado cuenta de lo mismo en uno de mis proyectos. Guardé las imágenes y las dibujé con NSDrawNinePartImage en un nuevo proyecto, y dibujaron bien. Sin embargo, cuando los dibujo en mi botón personalizado, tienen espacios vacíos. –

+0

¿Estás seguro de que estás recurriendo a los límites de píxeles? En la primera imagen, parece que hay una representación subpíxel que no puedo ver en la segunda imagen. – kperryua

+3

Como mi respuesta fue eliminada, responderé a su pregunta de seguimiento aquí. Donde dibuje sus nueve partes, use '- [NSView convertRect: toView: nil]' en el marco que pase a 'NSDrawNinePartImage' e imprima el resultado. Si hay valores no integrales, entonces esa podría ser la causa de su problema. Use algo como '- [NSView centerScanRect:]' para asegurarse de que rect sea solo los límites de píxeles. – kperryua

Respuesta

1

¿Es posible que su parte superior izquierda e inferior derecha son imágenes de un píxel demasiado ancho?

Esta función utiliza las imágenes de las esquinas superior izquierda e inferior derecha para determinan las anchuras y alturas de las zonas de borde que necesitan ser llenados . Si el ancho o la altura de las imágenes inferior izquierda y superior derecha no tienen el tamaño adecuado, se pueden escalar para llenar el área de su esquina. Las áreas de borde entre las esquinas se alicatan con la imagen correspondiente . De forma similar, el área central se muestra en mosaico utilizando la imagen del centro especificado .

0

Utilice tamaños uniformes en las imágenes. Hice esto, y resolvió este problema para mí.

4

He arreglado un problema similar por la opción de desactivar el anti-alias

NSGraphicsContext* theContext = [NSGraphicsContext currentContext]; 
[theContext saveGraphicsState]; 
[theContext setShouldAntialias: NO]; 
NSDrawNinePartImage(...); 
[theContext restoreGraphicsState]; 
Cuestiones relacionadas