解决NSImage绘制的时候图像模糊

本文介绍了一款工具,旨在解决Mac下使用NSImage绘制图像时出现的模糊问题,通过调整绘制坐标为整数像素,实现图像清晰显示。

Mac下NSImage绘制模糊的原因之一是draw到了非整数像素上,框架在渲染的时候就会模糊. 针对这一原因写了以下工具:

/**
 * @brief 一劳永逸的解决NSImage绘制的时候绘到浮点值像素上造成的图像模糊.
 * @note 目前只hook了drawInRect:fromRect:operation:fraction:这个函数.
 * @author hUyIncHun
 */

#import <Cocoa/Cocoa.h>

@interface NSImage(dIR)

+ (void)doMyWork;

@end
//
//  NSImage+DrawSafely.m
//  RTX
//
//  Created by hUyIncHun on 13-10-24.
//

#import "NSImage+DrawSafely.h"
#import <objc/runtime.h>
#import <objc/message.h>



static IMP g_oldImp_drawInRect;


static void newImp_drawInRect(id self, SEL _cmd, NSRect rect, NSRect rect2, NSCompositingOperation op, CGFloat f)
{
    rect.origin.x = (int)rect.origin.x;
    rect.origin.y = (int)rect.origin.y;
    g_oldImp_drawInRect(self, _cmd, rect, rect2, op, f);
}


@implementation NSImage(dIR)

+ (void)doMyWork
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken,^
                  {

                      g_oldImp_drawInRect =
                      method_setImplementation(
                                               class_getInstanceMethod(self, @selector(drawInRect:fromRect:operation:fraction:))
                                               , (IMP)newImp_drawInRect
                                               );
                  });
}

@end

 

转载于:https://www.cnblogs.com/xiaouisme/p/3387238.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值