uso una tamaño mostrar insertar img imagen ejemplo desde como centrar carpeta atributo objective-c macos cocoa nsimage

objective c - tamaño - Obtén el ancho y la altura correctos de una imagen NSI



tamaño de imagen html (5)

Uso el siguiente código para obtener el ancho y el alto de un NSImage:

NSImage *image = [[[NSImage alloc] initWithContentsOfFile:[NSString stringWithFormat:s]] autorelease]; imageWidth=[image size].width; imageHeight=[image size].height; NSLog(@"%f:%f",imageWidth,imageHeight);

Pero en algún momento imageWidth , imageHeight no devuelve el valor correcto. Por ejemplo, cuando leo una imagen, la información EXIF ​​muestra:

PixelXDimension = 2272; PixelYDimension = 1704;

Pero imageWidth, imageHeight salidas

521:390


Apple utiliza un sistema de puntos basado en DPI para asignar puntos a píxeles de dispositivos físicos. No importa lo que diga el EXIF, importa cuántos puntos de pantalla lógicos tenga su lienzo para mostrar la imagen.

iOS y OSX realizan este mapeo por ti. El único tamaño que debería preocuparle es el tamaño devuelto por UIImage.size

No puedes (la lectura no debería tener que preocuparte) haz el mapeo a los píxeles del dispositivo, por eso Apple lo hace.


El método de tamaño NSImage devuelve información de tamaño que depende de la resolución de pantalla. Para obtener el tamaño representado en la imagen del archivo real, necesita usar un NSImageRep.

Consulte el nsimage-size-not-real-size-with-some-pictures y reciba ayuda


La API directa da también los resultados correctos.

CGImageRef cgImage = [oldImage CGImageForProposedRect:nil context:context hints:nil]; size_t width = CGImageGetWidth(cgImage); size_t height = CGImageGetHeight(cgImage);


Las dimensiones de su imagen en píxeles se almacenan en NSImageRep de su imagen. Si su archivo contiene una sola imagen, será así:

NSImageRep *rep = [[image representations] objectAtIndex:0]; NSSize imageSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);

donde imagen es su imagen NSI e tamaño de imagen es su tamaño de imagen en píxeles.


SWIFT 4

Tienes que hacer una representación NSBitmapImageRep de NSImage para obtener la altura y el ancho de píxeles correctos. Primero, una extensión de este para recopilar un CGImage del NSImage :

extension NSImage { @objc var CGImage: CGImage? { get { guard let imageData = self.tiffRepresentation else { return nil } guard let sourceData = CGImageSourceCreateWithData(imageData as CFData, nil) else { return nil } return CGImageSourceCreateImageAtIndex(sourceData, 0, nil) } } }

Luego cuando quieras obtener la altura y el ancho:

let rep = NSBitmapImageRep(cgImage: (NSImage(named: "Your Image Name")?.CGImage)!) let imageHeight = rep.size.height let imageWidth = rep.size.width