Уменьшенный размер изображения в NSScrollView - PullRequest
0 голосов
/ 16 февраля 2010

Я пытаюсь загрузить изображение в мой NSImageView / NSScrollView и отобразить его в фактическом размере, но изображение таинственным образом заканчивается отображением примерно в половинном размере. Сначала я подумал, что его можно уменьшить, чтобы он соответствовал некоторым ограничениям кадра и т. Д., Но вскоре понял, что это не может быть правильным, потому что если я физически увеличу размер изображения (в программе редактирования изображений), а затем загрузлю его Опять же, я обнаружил, что могу предположительно загружать / отображать изображения настолько большого размера, насколько захочу.

Фактический размер рассматриваемого изображения составляет всего 2505 x 930, что, я думаю, не является проблемой, поскольку я могу удвоить и увеличить его в четыре раза без каких-либо явных проблем (за исключением того, что все они уменьшены примерно на 50). % при отображении). Соответствующая часть моего очень простого кода:

- (IBAction)openSourceImage:(NSString*)aFilepath
{
// obtain image filepath passed from 'chooseFile'...
NSImage *theImage = [[NSImage alloc] initWithContentsOfFile:aFilepath];
if (theImage)
    {
    [theImageView setImage:theImage];
    // resize imageView to fit image; causes the surrounding NSScrollView to adjust its scrollbars appropriately...
    [theImageView setFrame:
        NSMakeRect([theImageView frame].origin.x, [theImageView frame].origin.y, [theImage size].width, [theImage size].height)];
    [theImageView scrollRectToVisible:
        NSMakeRect([theImageView frame].origin.x, [theImageView frame].origin.y + [theImageView frame].size.height,1,1)];
    [theImage release]; // we're done with 'theImage' we allocated, so release it

    // display the window title from the filepath...
    NSString *aFilename = [aFilepath lastPathComponent];
    [[theImageView window] setTitle:aFilename];
}

}

Может кто-нибудь сказать, пожалуйста, где я не так, и как отображать изображения в реальном размере?

Решение: Ладно, поэтому вызов 'size' приводит к отображению слишком маленького изображения, с которым можно работать, а вызовы 'pxHigh / pixWide' приводит к увеличению изображения неопределенного масштаба ...

В моем тестовом приложении используется пара «перекрестий», управляемых ползунком, для построения координат объектов на изображении (например, на фотографии или карте). По чистой случайности я случайно заметил, что в то время как загруженное изображение отображается только с долей его фактического размера, координаты x, y DID соответствуют реальной жизни (что составляет около 70 пикселей / дюйм). Пойди разберись с этим ...

Использование:

[theImage setSize:NSMakeSize(imageSize.width * 4, imageSize.height * 4)];

Теперь я могу загрузить изображение при ИЗВЕСТНОМ увеличении и уменьшить мои построенные измерения x, y на тот же коэффициент. Я также добавил метод NSAffineTransform, чтобы позволить мне увеличивать / уменьшать для лучшего размера просмотра.

Уф! Это было непросто для кого-то на моем довольно начинающем уровне, и я до сих пор не понимаю причину первоначальной проблемы с отображением, но я думаю, что конечный результат - это все, что имеет значение. Еще раз спасибо вам обоим: -)

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Я не совсем уверен, почему изображение не будет подходящего размера, но вы можете попробовать "исправить" размер, чтобы соответствовать одному из размеров его представлений:

NSBitmapImageRep* aRep = [[theImage representations] objectAtIndex: 0];

NSSize correctedImageSize = NSMakeSize([aRep pixelsWide], [aRep pixelsHigh]);
[theImage setSize:correctedImageSize];

(Конечно, возможно, репутация тоже неправильного размера!)

1 голос
/ 18 февраля 2010

Метод size возвращает размер в точках, а не в пикселях. Методы pixelsHigh и pixelsWide - это то, что вам нужно.

...