耗时两个月,每天“爆肝”14个小时:他用C++手搓了一个「Photoshop」!

C语言与CPP编程 2025-04-21 09:03

本文经授权转自公众号CSDN(ID:CSDNnews)

作者 | Marek Foss,翻译 | 郑丽媛

【编者按】在开发者的成长之路上,总有一些项目让人记忆犹新——或是因为挑战巨大,或是因为收获满满。本文作者回顾了自己大学时期的一次大胆尝试:用 C++ 和 Windows API 复刻 Photoshop从最初的不满于现有漫画阅读器,到后来动手开发自己的理想工具,他一步步走向了更高难度的挑战——打造一款轻量级但功能强大的 图像编辑器 Fedit

原文链接:https://f055.net/technology/that-time-i/that-time-i-recreated-photoshop-in-c/


随着年龄增长,我开始回顾自己作为一名创意开发者所做过的各种项目,发现其中有很多不错的作品!不过,我从未记录过它们的开发历程,导致这些项目即使在发布时非常成功,也都随着时间的流逝被逐渐遗忘。因此,我决定开启一个新的系列文章——围绕“那次,我……”这个主题,用来回顾我做过的一些最有趣的项目。

今天,就来说说那次我用 C++ 和 Windows API 复刻 Photoshop 的故事!


1、复刻 Photoshop 的想法,缘起于漫画阅读器

这一切始于 2006 年初夏。当时,我正痴迷于看漫画,但市面上的图片阅读软件体验都不尽如人意:没有一款应用可以仅通过鼠标就能完成阅读操作,总是要去频繁触摸键盘,这让我觉得很麻烦。正巧,那时我刚在大学里完了 C++/Windows API 课程,于是我决定利用暑假自己动手,写一个我心目中完美的漫画阅读器——这个软件后来被我命名为 Fiew。

2006 年初秋,我们回到学校,并开始思考毕业设计的选题。由于开发 Fiew 的过程十分顺利,我突然萌生了一个想法:既然能做一个图片查看器,那为何不尝试开发一个图片编辑器呢?

彼时,我是 Adobe Photoshop 的重度用户,于是很快便设定了一个目标:自己写一个 Photoshop。当时我天真地想,这能有多难?然而事实证明,我错得离谱。


2、基于 Windows API 和 GDI+ 的高级图片编辑器

接下来的几个月,我开始开发一个名为 Fedit 的高级图片编辑器,使用 C++ 结合 Windows API 和 GDI+ 图形库完成实现。我给自己制定了五条核心原则,以确保该软件对用户友好:无需安装、无需压缩包、无需注册表键值、无需额外运行时以及单一可执行文件。

最终,这些原则让 Fedit 具备了以下特性:免安装,开箱即用;可以在权限受限的系统上运行,甚至可以直接从 U 盘启动;资源占用极低。

在 UI 设计上,我也尽可能地还原了 Photoshop 的经典界面,并包含了我最常用的功能。例如,自由浮动窗口、优秀的颜色选择、易于管理的图层、可逐步撤销的历史记录、多种图片滤镜以及允许用户自定义像素变换滤镜的矩阵接口。

此外,在 Fiew 项目的基础上,我还为 Fedit 加入了一个超大图片库查看器,能够高效快速地滚动浏览大量图片。


3、代码挑战与开发经历

尽管开发 Fedit 的过程充满乐趣,但我同时也遇到了不少问题。

我花费了大量时间在 MSDN 和 Stack Overflow 上查找解决方案,但这并没有太大帮助,因为大多数问题都非常特殊且具体,我还是得靠自己去分析和调试。好在我的动力十足:为了赶上学士论文的截止日期,在最后两个月里,我每天埋在这个项目里 14 个小时。

其中,UI 设计是整个项目中最棘手的部分。我希望 Fedit 的操作流程尽可能接近 Photoshop,但有些功能实在是很难实现:可自由吸附/分离的工具面板、颜色选择器以及工具选择器的复刻。

当我最终完成这个项目后,几乎已经是筋疲力尽,甚至看到 WinAPI 都有些烦了。但值得庆幸的是,我的论文成功了,我成功拿到了华沙理工大学(Warsaw University of Technology)工程学学士学位。同时,Fedit 也在网上得到了不少正面评价,但我并没有刻意推广它,而是选择了好好休息了一段时间。

几个月后,由于 Fiew 和 Fedit 给 GoldenLine(波兰版 LinkedIn,在当时是市场领导者,但现已倒闭)的 CTO 留下了深刻印象,我因此获得了一份 C++ 工作,负责开发一个极高效的 WinAPI 应用,用于处理大规模图片上传,为一家 Flickr 克隆网站提供支持——也就是说,我的所有这些努力都得到了回报。

目前,Fedit 和 Fiew 的源代码已公开在 GitHub(https://github.com/f055/fedit-image-editor),论文文档也可以下载 PDF 版本(https://f055.net/wp-content/uploads/files/Thesis-Fedit.pdf)。同时,这些应用的原始官方网站仍可通过 Web Archive 访问(https://web.archive.org/web/20140517125711/http://fapplication.org/)

本文转自公众号“CSDN”,ID:CSDNnews


推荐阅读  点击标题可跳转

1、C++训练营,来了!

2、HarmonyOS 学习资料分享(无套路免费分享)

我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会

加个微信,打开另一扇窗

感谢你的分享,点赞,在看三  

C语言与CPP编程 C语言/C++开发,C语言/C++基础知识,C语言/C++学习路线,C语言/C++进阶,数据结构;算法;python;计算机基础等
评论
  • 检测电磁铁性能需要系统性地考察多个关键指标。首先通过吸附测试评估磁力强度,可定量测量最大吸附重量或定性观察衔铁动作的灵敏性。电气参数检测包括测量线圈电阻值是否正常,以及通电后电流是否稳定在额定范围内。动态性能方面需测试响应时间和释放特性,记录通电吸合与断电分离的时效性。环境适应性验证要模拟电压波动和高温条件,观察磁力稳定性变化。安全检测环节必须检查绝缘状态和接线可靠性,运行中注意异常发热、异响等故障征兆。日常维护应保持磁极面清洁,定期复测线圈电阻。专业应用场合建议使用磁通计等仪器精确测量磁场参数
    锦正茂科技 2025-06-12 11:20 3894浏览
  • 七年前买了个远程控制开关,想想那个时候应该物联网才兴起的时候吧。如今因为控制麻烦且经常出现连接掉线问题,于是给淘汰了。这个设备我是拿来控制吊灯,特别麻烦的是,当晚上关灯后,会有一点灯点亮着,掉线的时候还会闪,想想睡梦中醒来往天花板一看,一个东西在那闪多吓人,关键还是绿色的。而且二次匹配需要打开灯罩,按那个黑色的按钮才能重新配网。种种原因,让我今天给他拆了,结构也简单,拆开外壳就只有一个主板正面正面电路看起来还是很简单的:220V经过整流桥(背面U1),通过变压器将市电转化低压直流电一个继电器,这
    二月半 2025-06-12 14:32 317浏览
  • 夸克发布首个高考志愿大模型,为考生提供了智能化、个性化的志愿填报服务,这一创新对考生群体和传统报考机构产生了截然不同的影响。对于考生而言,夸克高考志愿大模型无疑是一大利好。该模型整合了教育官网、省招生办官网等权威信息源,确保数据准确可信,同时将高校毕业生就业信息、产业趋势等纳入知识库,为考生提供更全面的参考。通过深度搜索、志愿工具和志愿报告三大服务,夸克能精准理解考生需求,提供从专业适配性、地域优势到就业前景的全方位分析,并生成专属志愿报告和多种填报策略。这种智能化、个性化的服务大大减轻了考生和
    curton 2025-06-12 17:24 6453浏览
  • 随着游戏和影音需求的快速增长,市场上越来越多屏幕主打「高刷新率」,号称能为用户带来更流畅的视觉体验。不论是追求实时反应的游戏玩家,还是偏好画面清晰稳定的影视爱好者,高刷新率屏幕都成为热门的选择。然而,流畅的画面不只取决于刷新率,常被忽略的掉帧(Frame Drop)也是影响用户体验的关键因素。若PC系统无法稳定输出对应的FPS(每秒帧数),即使具备高刷新率,画面仍然会因掉帧而导致卡顿、撕裂、延迟等问题,让用户感受大打折扣。掉帧问题影响到游戏流畅示意图本次案例是笔电厂商,近期推出的一款支持高刷新率
    百佳泰测试实验室 2025-06-12 18:02 46浏览
  • 本文教你从开发到部署,用 Docker 将 Python Flask 应用容器化,引入反向代理 Nginx,实现 HTTPS 支持、环境隔离与持续部署准备,是现代开发者必备的实战技能。https://txc.qq.com/products/732159/blog/1106857 https://txc.qq.com/products/732159/blog/1106856 https://txc.qq.com/products/732160/blog/1106855 https://txc
    小菜菜编程 2025-06-12 16:36 307浏览
  • 近年来,随着全球能源转型和清洁能源行业的快速发展,户用光伏系统的装机量正呈逐年上升态势。同时,为了应对居民用电价格的显著上涨以及峰谷电价差异的持续扩大,在户用储能单元可大幅降低用电成本的背景下,各国正在大力扶持光伏配储政策,户用光储系统已逐步成为普通家庭应对电价波动与电网停机的经济之选。据高工产研储能研究所(GGII)统计数据显示,2024年全球户用储能装机规模约14GWh,GGII预计2025年全球户用储能市场规模将以25%的增速发展,装机规模将达到17.5GWh,整体增长趋势显著。而这也从侧
    华普微HOPERF 2025-06-12 14:16 498浏览
  • 全球第一大PC厂商联想Lenovo,近期发布Lenovo Air X AI元启版,Lenovo YOGA 360 14 Aura Al元启翻转轻薄本、Lenovo YOGA 360 14 AI元启版、Lenovo YOGA Air 15 Aura Al元启版等多款笔记本电脑,均INBOX标配65W 49cc氮化镓快充充电器,这是迄今为止联想笔记本电脑最小体积的65W INBOX电源适配器。据悉,该款产品得益于镓未来G1N65R150PB-N GaN方案以及平面变压器模块的加持,设计得相当小巧,尺
    电子热文焦点 2025-06-13 14:17 55浏览
  • 《从磁能管理到开关电源设计》+认识电感 很幸运能获得这次《从磁能管理到开关电源设计》试读机会。让我能通过这本书更全面的了解电感,了解电感的生产,应用。更全面的了解电感。是的,电感,电阻,电容在电路应用中是基本的三大被动器件。在各领域都有所应用。 电感在开关电路中应用较为常见,是不可或缺的器件,他把电路中的电能转化为磁能阻碍电流的变化。电感的单位是H,它不同于磁珠。磁珠是应用在高频电路中,高频下成电阻产生热降低EMI.而电感式工作在低频中。在电源输入有差分电感,共模电感,等等不同种类。对EMI有各
    zhusx123 2025-06-14 20:29 718浏览
  • 贞光科技作为业内知名的车规及工业元器件供应商,现已成为紫光国芯存储芯片的授权代理商。在半导体存储芯片国产化的关键时期,这一合作为推动DRAM等关键器件的国产替代开辟了新的渠道。紫光国芯在存储芯片领域的技术积累,加上贞光科技在车规和工业应用方面的专业优势,正在为客户提供更可靠的国产化解决方案。产品技术实力:从DDR到LPDDR的全面布局紫光国芯在存储芯片方面的技术积累确实令人印象深刻。该公司的DRAM产品覆盖标准SDR、DDR、DDR2、DDR3、DDR4和移动用LPDDR、LPDDR2、LPDD
    贞光科技 2025-06-13 16:01 50浏览
  • 在金融 AI 赛道一路疾驰的百融云创,向来是资本市场的焦点。2021年上市以来,其营收曾一路高歌猛进,从2021年的16.23亿元,到2022年的20.54亿元,再到2023年的26.81亿元,增长率颇为亮眼。净利润也随之水涨船高,分别为1.41亿元同比增长76%、2.94亿元同比增幅108%、3.4亿元同比增长42%。不曾想,2024年风云突变,百融云创虽营收达29.29亿元,仍有 9% 的增长,但净利润却骤降至2.66亿元,同比下滑21.82%,上市以
    用户1742991715177 2025-06-15 21:36 772浏览
  • 随着数据中心对于网络带宽和延迟的要求日益增长,传统的TCP/IP网络已无法满足性能要求,RDMA网络则凭借其高带宽、低延时的特性脱颖而出。相较于传统TCP/IP协议,RDMA具有零拷贝、不需要CPU接入、消息基于事务等特点 。RDMA协议与传统TCP/IP协议在通信过程中的区别如图1所示。图1TCP/IP协议与RDMA协议区别图在图1中,左侧部分为传统TCP/IP协议的通信过程,当需要发送数据包时,应用程序将要传输的数据拷贝到TCP/IP协议栈的BUFFER中,TCP/IP协议栈组包后,再经由驱
    zzbwx_326664406 2025-06-14 23:28 67浏览
  • FPU 是“Floating Point Unit”的缩写,中文意思是“浮点运算单元”。它是一种专门用于处理浮点数运算的硬件组件,通常集成在计算机的处理器(CPU)中,也可以是一个独立的芯片。以下是关于 FPU 的一些详细信息:  1. 功能    浮点数运算 :FPU 主要用于执行浮点数的加、减、乘、除等基本运算,以及更复杂的数学运算,如平方根、对数、三角函数等。    提高计算效率 :与整数运算相比,浮点运算在处理小数和高精度计算时更加高效。
    丙丁先生 2025-06-13 09:33 39浏览
  • 0.6"HDMI单目方案 在 AR 产业浪潮席卷全球的当下,Micro OLED 凭借高分辨率、低延迟等特性成为显示技术新宠。从消费级智能设备到专业级行业应用,Micro OLED 商业化进程也在全速推进。面对瞬息万变的市场环境,终端应用厂商亟需高效解决方案加速产品验证与落地。冠显光电最新推出的0.6"HDMI单目驱动板方案,以小型化设计和灵活开发能力,助力企业抢占市场先机。方案组成 该方案主要包括0.6”硅基显示屏,HDMI单目显示屏驱动板。驱动板以 Micro HDMI
    冠显光电MicroOLED代理视涯 2025-06-13 13:54 623浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦