电子产业一站式赋能平台

PCB联盟网

搜索
查看: 9|回复: 0
收起左侧

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

[复制链接]

562

主题

562

帖子

6765

积分

高级会员

Rank: 5Rank: 5

积分
6765
发表于 昨天 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。

yxrbqoo11xe64033376138.png

yxrbqoo11xe64033376138.png

2006 年初秋,我们回到学校,并开始思考毕业设计的选题。由于开发 Fiew 的过程十分顺利,我突然萌生了一个想法:既然能做一个图片查看器,那为何不尝试开发一个图片编辑器呢?
彼时,我是 Adobe Photoshop 的重度用户,于是很快便设定了一个目标:自己写一个 Photoshop。当时我天真地想,这能有多难?然而事实证明,我错得离谱。

2、基于 Windows API 和 GDI+ 的高级图片编辑器
接下来的几个月,我开始开发一个名为 Fedit 的高级图片编辑器,使用 C++ 结合 Windows API 和 GDI+ 图形库完成实现。我给自己制定了五条核心原则,以确保该软件对用户友好:无需安装、无需压缩包、无需注册表键值、无需额外运行时以及单一可执行文件。
最终,这些原则让 Fedit 具备了以下特性:免安装,开箱即用;可以在权限受限的系统上运行,甚至可以直接从 U 盘启动;资源占用极低。

f5u1frwlppu64033376238.png

f5u1frwlppu64033376238.png

在 UI 设计上,我也尽可能地还原了 Photoshop 的经典界面,并包含了我最常用的功能。例如,自由浮动窗口、优秀的颜色选择、易于管理的图层、可逐步撤销的历史记录、多种图片滤镜以及允许用户自定义像素变换滤镜的矩阵接口。
此外,在 Fiew 项目的基础上,我还为 Fedit 加入了一个超大图片库查看器,能够高效快速地滚动浏览大量图片。

ari4olov14l64033376338.png

ari4olov14l64033376338.png


3、代码挑战与开发经历
尽管开发 Fedit 的过程充满乐趣,但我同时也遇到了不少问题。
我花费了大量时间在 MSDN 和 Stack Overflow 上查找解决方案,但这并没有太大帮助,因为大多数问题都非常特殊且具体,我还是得靠自己去分析和调试。好在我的动力十足:为了赶上学士论文的截止日期,在最后两个月里,我每天埋在这个项目里 14 个小时。
其中,UI 设计是整个项目中最棘手的部分。我希望 Fedit 的操作流程尽可能接近 Photoshop,但有些功能实在是很难实现:可自由吸附/分离的工具面板、颜色选择器以及工具选择器的复刻。

liegbhib1cd64033376439.png

liegbhib1cd64033376439.png


wgtx3qy0e1i64033376539.png

wgtx3qy0e1i64033376539.png

gaccsx43eo464033376639.png

gaccsx43eo464033376639.png

ljk4fpwv51y64033376739.png

ljk4fpwv51y64033376739.png

当我最终完成这个项目后,几乎已经是筋疲力尽,甚至看到 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


ca4t3fbgpmj64033376839.gif

ca4t3fbgpmj64033376839.gif

推荐阅读  点击标题可跳转1、C++训练营,来了!
2、HarmonyOS 学习资料分享(无套路免费分享)
我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。

dkln2utl5vb64033376939.png

dkln2utl5vb64033376939.png

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

vaaifssbijx64033377039.png

vaaifssbijx64033377039.png

加个微信,打开另一扇窗
感谢你的分享,点赞,在看三  

qv3xesz3swe64033377139.gif

qv3xesz3swe64033377139.gif

回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表