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

B站影视 港台电影 2025-03-18 02:41 1

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

在开发者的成长之路上,总有一些项目让人记忆犹新——或是因为挑战巨大,或是因为收获满满。

本文作者回顾了自己大学时期的一次大胆尝试:C++ 和 Windows API 复刻 Photoshop

从最初的不满于现有漫画阅读器,到后来动手开发自己的理想工具,他一步步走向了更高难度的挑战——打造一款轻量级但功能强大的

图像编辑器 Fedit

原文链接:

https://f055.net/technology/that-time-i/that-time-i-recreated-photoshop-in-c/

作者 | Marek Foss 翻译 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

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

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

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

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

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

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

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

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

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

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

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

代码挑战与开发经历

尽管开发 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/)。

“C++ 几乎可以实现我们所期望的一切!”C++ 之父提到。从构建操作系统到开发高性能游戏引擎,从支持人工智能框架到驱动航天器控制系统,C++一直是系统级软件开发的首选语言。

侯捷作为知名的 C++ 专家,他的 C++ 课程和著作在业界享有盛誉,他引导开发者深入理解 C++,从基础到实战,助力他们在实际工作中灵活应用这门语言。

来源:CSDN

相关推荐