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

解决NSImage绘制的时候图像模糊的更多相关文章

  1. 解决caffe绘制训练过程的loss和accuracy曲线时候报错:paste: aux4.txt: 没有那个文件或目录 rm: 无法删除"aux4.txt": 没有那个文件或目录

    我用的是faster-rcnn,在绘制训练过程的loss和accuracy曲线时候,抛出如下错误,在网上查找无数大牛博客后无果,自己稍微看了下代码,发现,extract_seconds.py文件的 g ...

  2. python 解决cv2绘制中文乱码

    因为使用cv2.putText() 只能显示英文字符,中文会出现乱码问题, 因此使用PIL在图片上绘制添加中文,可以指定字体文件. 大体思路: OpenCV图片格式转换成PIL的图片格式: 使用PIL ...

  3. C# 解决DrawImage绘制图片拉伸产生渐变

    ImageAttributes ImgAtt = new ImageAttributes(); ;                 ImgAtt.SetWrapMode(System.Drawing. ...

  4. Android 性能优化之减少UI过度绘制

    什么是过度绘制(OverDraw) 在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次.这样就会浪费大量的CPU以及GPU资源.过度绘制最直观的影响就是会导致 ...

  5. 转:devicePixelRatio和webkitBackingStorePixelRatio

    转:关于canvas在retina屏下绘制文字或图像模糊的解决方案 一.问题描述 最近在鼓捣canvas的时候,发现绘制在canvas上的文字(或图片)在retina屏幕上会出现显示模糊的问题,感觉很 ...

  6. UI神器-SOUI

    前言 在Windows平台上开发客户端产品是一个非常痛苦的过程,特别是还要用C++的时候.尽管很多语言很多方法都可以开发Windows桌面程序,目前国内流行的客户端产品都是C++开发的,比如QQ,YY ...

  7. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...

  8. MFC双缓冲绘图(2015.09.24)

    问题引入: 最近在尝试编写贪吃蛇游戏时遇到这么一个问题:当系统以较快频率向窗口发送WM_PAINT消息时,调用OnPaint()函数在窗口中绘制图形就会发生闪烁现象. 问题分析: 当我们把绘图过程放在 ...

  9. 矢量化的HTML5拓扑图形组件设计

    HT一直被客户称道的就是其全矢量化的设计特色,矢量相比传统图片好处太多了: www.hightopo.com/guide/guide/core/vector/ht-vector-guide.html ...

随机推荐

  1. Excel还是那些事

        文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  2. POJ1679 The Unique MST 【次小生成树】

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20421   Accepted: 7183 D ...

  3. Eclipse 中选中一个单词 ,其他相同的单词颜色就会变化

    "Window"-"preferences"-"Java"-"Editor"-"Mark Occurrence ...

  4. raise语句

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #Python学习手册 868 #raise语句 res=[IndexError,TypeError] #ra ...

  5. Linux下FTP命令的使用方法

    FTP> ? 显示 ftp 命令说明.? 与 help 相同. 格式:? [command] 说明:[command]指定需要帮助的命令名称.如果没有指定 command,ftp 将显示全部命令 ...

  6. 交叉编译OpenWrt 定制固件

    在Centos7上交叉编译生成OpenWrt固件 安装ss-* 获取最新的ss, 当前是 wget https://github.com/shadowsocks/shadowsocks-libev/a ...

  7. OpenWrt设置访客网络Guest Wi-Fi

    参考 https://wiki.openwrt.org/doc/recipes/guest-wlan-webinterface 1. 在2.4GHz Wireless Controller下, 创建访 ...

  8. spring cloud单点登录

    概述 基于springcloud的单点登录服务及基于zuul的网关服务(解决了通过zuul转发到认证服务之后session丢失问题) 详细 代码下载:http://www.demodashi.com/ ...

  9. /proc/meminfo分析(一)

    本文主要分析/proc/meminfo文件的各种输出信息的具体含义. 一.MemTotal MemTotal对应当前系统中可以使用的物理内存. 这个域实际是对应内核中的totalram_pages这个 ...

  10. Android仿联系人列表分组悬浮列表实现,自己定义PinnedHeaderListView实现

    效果 (关于gif怎么生成的.我先录手机的屏幕得到mp4文件.然后用这个网址:https://cloudconvert.com/mp4-to-gif 进行的mp4转换gif,使用的时候须要又一次选择g ...