<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=ProjectSemiPhotoshop%2FSpikeSolution</id>
	<title>ProjectSemiPhotoshop/SpikeSolution - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=ProjectSemiPhotoshop%2FSpikeSolution"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;action=history"/>
	<updated>2026-05-14T22:34:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=84831&amp;oldid=prev</id>
		<title>Maintenance script: Repair batch-0003 pages from live compare</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=84831&amp;oldid=prev"/>
		<updated>2026-03-27T00:29:06Z</updated>

		<summary type="html">&lt;p&gt;Repair batch-0003 pages from live compare&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:29, 27 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l307&quot;&gt;Line 307:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 307:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor = 0;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor = 0;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;i*lw+j&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;i*lw+j&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;i*lw+(j+1)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;i*lw+(j+1)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;(i+1)*lw+j&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;(i+1)*lw+j&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;(i+1)*lw+(j+1)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor += (int)((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;(i+1)*lw+(j+1)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor/=4;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			avrcolor/=4;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;i*lw+j&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/del&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;i*lw+j&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93; &lt;/ins&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;i*lw+(j+1)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/del&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;i*lw+(j+1)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93; &lt;/ins&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;(i+1)*lw+j&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/del&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;(i+1)*lw+j&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93; &lt;/ins&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;(i+1)*lw+(j+1)&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;] &lt;/del&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  			((BYTE *)pPixels)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#91;&lt;/ins&gt;(i+1)*lw+(j+1)&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93; &lt;/ins&gt;= (char)avrcolor;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  		}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  	}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l334&quot;&gt;Line 334:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 334:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Thread ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Thread ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;내 생각엔 SpikeSolution 과정에서 중복된 코드가 나올것 같고 나중에 이것들을 묶어서 단순한 설계를 구현시킬 수 있을 것 같다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;내 생각엔 SpikeSolution 과정에서 중복된 코드가 나올것 같고 나중에 이것들을 묶어서 단순한 설계를 구현시킬 수 있을 것 같다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   오 신기하다. 이걸로 솔루션이 세개쯤인거네, 우리조는 선택도 할수 있네 대단한조 ;; --&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/del&gt;neocoin&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   오 신기하다. 이걸로 솔루션이 세개쯤인거네, 우리조는 선택도 할수 있네 대단한조 ;; --neocoin&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;지금 위키 참 맘에 안드네.. BR테그 쓰는 법이 뭐라구? ㅡ.ㅡ  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;지금 위키 참 맘에 안드네.. BR테그 쓰는 법이 뭐라구? ㅡ.ㅡ  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; ~cpp [[&lt;/del&gt;BR&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;&amp;amp;#91;&amp;amp;#91;&lt;/ins&gt;BR&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;#93;&amp;amp;#93;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이것, 하지만 쓰지 않고 얼마든지 방법이 ;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이것, 하지만 쓰지 않고 얼마든지 방법이 ;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff::1.12:old-83442:rev-84831 --&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=83442&amp;oldid=prev</id>
		<title>Maintenance script: Repair MoniWiki formatting after migration</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=83442&amp;oldid=prev"/>
		<updated>2026-03-26T14:01:41Z</updated>

		<summary type="html">&lt;p&gt;Repair MoniWiki formatting after migration&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:01, 26 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l358&quot;&gt;Line 358:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 358:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[ProjectSemiPhotoshop]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[ProjectSemiPhotoshop]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff::1.12:old-37772:rev-83442 --&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=37772&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:24, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=ProjectSemiPhotoshop/SpikeSolution&amp;diff=37772&amp;oldid=prev"/>
		<updated>2021-02-07T05:24:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;이 페이지는 [[ProjectSemiPhotoshop]]의 Spike Solution 페이지 입니다.&lt;br /&gt;
----&lt;br /&gt;
[[ProjectSemiPhotoshop/요구사항]]에 있는 스토리의 난이도를 추정하고 문제 영역 전반을 다루는 페이지입니다.&lt;br /&gt;
기존 테스트만 하는 방식을 떠나.. 팀플 시간관계상 소스 구현을 재활용/체계화하는 목적으로 두었습니다.&lt;br /&gt;
&lt;br /&gt;
== Spike Solution ==&lt;br /&gt;
=== 이미지 클래스 전체 모습 ===&lt;br /&gt;
 class CImage&lt;br /&gt;
 {&lt;br /&gt;
 protected:&lt;br /&gt;
 	HDIB m_hImage;		//image handle&lt;br /&gt;
 	HDIB m_hUndoImage;	         //undo image handle&lt;br /&gt;
 	CSize m_Size;		//image size&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
 	BOOL InitDIB(BOOL bCreatePalette = TRUE);&lt;br /&gt;
 	void SetHandle(HANDLE hHandle);&lt;br /&gt;
 	BOOL CreateDIBPalette();&lt;br /&gt;
 &lt;br /&gt;
 	virtual ~CImage() { Free(); }&lt;br /&gt;
 	void Free();&lt;br /&gt;
 &lt;br /&gt;
 	int GetBitCount();&lt;br /&gt;
 	HDIB GetHandle()		{return m_hImage;}&lt;br /&gt;
 	BOOL IsDataNull()		{return (m_hImage == NULL);}&lt;br /&gt;
 	CSize GetSize()		{return m_Size;}	&lt;br /&gt;
 	int GetHeight()		{return m_Size.cy;}&lt;br /&gt;
 	int GetWidth()		{return m_Size.cx;}&lt;br /&gt;
 	int GetRealWidth()		{return WIDTHBYTES((GetWidth()*GetBitCount()));}&lt;br /&gt;
 	HDIB GetUndoHandle()	{return m_hUndoImage;}&lt;br /&gt;
 	CPalette *GetPalette()	{return m_pPal;}&lt;br /&gt;
 &lt;br /&gt;
 	BOOL Draw(HDC hDC, LPRECT sourceRect, LPRECT destRect);&lt;br /&gt;
 &lt;br /&gt;
 	BOOL Save(LPCTSTR lpszFileName);&lt;br /&gt;
 	BOOL Load(LPCTSTR lpszFileName);&lt;br /&gt;
 &lt;br /&gt;
 protected:&lt;br /&gt;
 	BOOL LoadBMP(LPCTSTR lpszFileName);&lt;br /&gt;
 	BOOL SaveBMP(LPCTSTR lpszFileName);&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 /******************************************************&lt;br /&gt;
 				DIB와 관련된 전역 함수&lt;br /&gt;
 ******************************************************/&lt;br /&gt;
 LPSTR WINAPI FindDIBBits(LPSTR lpbi)&lt;br /&gt;
 {&lt;br /&gt;
 	return (lpbi + *(LPDWORD)lpbi + ::PaletteSize(lpbi));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 DWORD WINAPI DIBWidth(LPSTR lpDIB)&lt;br /&gt;
 {&lt;br /&gt;
 	LPBITMAPINFOHEADER lpbmi;  // pointer to a Win 3.0-style DIB&lt;br /&gt;
 	LPBITMAPCOREHEADER lpbmc;  // pointer to an other-style DIB&lt;br /&gt;
 &lt;br /&gt;
 	/* point to the header (whether Win 3.0 and old) */&lt;br /&gt;
 &lt;br /&gt;
 	lpbmi = (LPBITMAPINFOHEADER)lpDIB;&lt;br /&gt;
 	lpbmc = (LPBITMAPCOREHEADER)lpDIB;&lt;br /&gt;
 &lt;br /&gt;
 	/* return the DIB width if it is a Win 3.0 DIB */&lt;br /&gt;
 	if (IS_WIN30_DIB(lpDIB))&lt;br /&gt;
 		return lpbmi-&amp;amp;gt;biWidth;&lt;br /&gt;
 	else  /* it is an other-style DIB, so return its width */&lt;br /&gt;
 		return (DWORD)lpbmc-&amp;amp;gt;bcWidth;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 DWORD WINAPI DIBHeight(LPSTR lpDIB)&lt;br /&gt;
 {&lt;br /&gt;
 	LPBITMAPINFOHEADER lpbmi;  // pointer to a Win 3.0-style DIB&lt;br /&gt;
 	LPBITMAPCOREHEADER lpbmc;  // pointer to an other-style DIB&lt;br /&gt;
 &lt;br /&gt;
 	/* point to the header (whether old or Win 3.0 */&lt;br /&gt;
 &lt;br /&gt;
 	lpbmi = (LPBITMAPINFOHEADER)lpDIB;&lt;br /&gt;
 	lpbmc = (LPBITMAPCOREHEADER)lpDIB;&lt;br /&gt;
 &lt;br /&gt;
 	/* return the DIB height if it is a Win 3.0 DIB */&lt;br /&gt;
 	if (IS_WIN30_DIB(lpDIB))&lt;br /&gt;
 		return lpbmi-&amp;amp;gt;biHeight;&lt;br /&gt;
 	else  /* it is an other-style DIB, so return its height */&lt;br /&gt;
 		return (DWORD)lpbmc-&amp;amp;gt;bcHeight;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 WORD WINAPI PaletteSize(LPSTR lpbi)&lt;br /&gt;
 {&lt;br /&gt;
    /* calculate the size required by the palette */&lt;br /&gt;
    if (IS_WIN30_DIB (lpbi))&lt;br /&gt;
 	  return (WORD)(::DIBNumColors(lpbi) * sizeof(RGBQUAD));&lt;br /&gt;
    else&lt;br /&gt;
 	  return (WORD)(::DIBNumColors(lpbi) * sizeof(RGBTRIPLE));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 WORD WINAPI DIBNumColors(LPSTR lpbi)&lt;br /&gt;
 {&lt;br /&gt;
 	WORD wBitCount;  // DIB bit count&lt;br /&gt;
 &lt;br /&gt;
 	/*  If this is a Windows-style DIB, the number of colors in the&lt;br /&gt;
 	 *  color table can be less than the number of bits per pixel&lt;br /&gt;
 	 *  allows for (i.e. lpbi-&amp;amp;gt;biClrUsed can be set to some value).&lt;br /&gt;
 	 *  If this is the case, return the appropriate value.&lt;br /&gt;
 	 */&lt;br /&gt;
 &lt;br /&gt;
 	if (IS_WIN30_DIB(lpbi))&lt;br /&gt;
 	{&lt;br /&gt;
 		DWORD dwClrUsed;&lt;br /&gt;
 &lt;br /&gt;
 		dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)-&amp;amp;gt;biClrUsed;&lt;br /&gt;
 		if (dwClrUsed != 0)&lt;br /&gt;
 			return (WORD)dwClrUsed;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	/*  Calculate the number of colors in the color table based on&lt;br /&gt;
 	 *  the number of bits per pixel for the DIB.&lt;br /&gt;
 	 */&lt;br /&gt;
 	if (IS_WIN30_DIB(lpbi))&lt;br /&gt;
 		wBitCount = ((LPBITMAPINFOHEADER)lpbi)-&amp;amp;gt;biBitCount;&lt;br /&gt;
 	else&lt;br /&gt;
 		wBitCount = ((LPBITMAPCOREHEADER)lpbi)-&amp;amp;gt;bcBitCount;&lt;br /&gt;
 &lt;br /&gt;
 	/* return number of colors based on bits per pixel */&lt;br /&gt;
 	switch (wBitCount)&lt;br /&gt;
 	{&lt;br /&gt;
 		case 1:&lt;br /&gt;
 			return 2;&lt;br /&gt;
 &lt;br /&gt;
 		case 4:&lt;br /&gt;
 			return 16;&lt;br /&gt;
 &lt;br /&gt;
 		case 8:&lt;br /&gt;
 			return 256;&lt;br /&gt;
 &lt;br /&gt;
 		default:&lt;br /&gt;
 			return 0;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /******************************************************&lt;br /&gt;
 				클립보드를 위한 전역 함수&lt;br /&gt;
 ******************************************************/&lt;br /&gt;
 HGLOBAL WINAPI CopyHandle (HGLOBAL h)&lt;br /&gt;
 {&lt;br /&gt;
 	if (h == NULL)&lt;br /&gt;
 		return NULL;&lt;br /&gt;
 &lt;br /&gt;
 	DWORD dwLen = ::GlobalSize((HGLOBAL) h);&lt;br /&gt;
 	HGLOBAL hCopy = ::GlobalAlloc(GHND, dwLen);&lt;br /&gt;
 &lt;br /&gt;
 	if (hCopy != NULL)&lt;br /&gt;
 	{&lt;br /&gt;
 		void* lpCopy = ::GlobalLock((HGLOBAL) hCopy);&lt;br /&gt;
 		void* lp     = ::GlobalLock((HGLOBAL) h);&lt;br /&gt;
 		memcpy(lpCopy, lp, dwLen);&lt;br /&gt;
 		::GlobalUnlock(hCopy);&lt;br /&gt;
 		::GlobalUnlock(h);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	return hCopy;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
 BOOL CImage::Load(LPCTSTR lpszFileName)&lt;br /&gt;
 {&lt;br /&gt;
 	CString filetype;&lt;br /&gt;
 	filetype = lpszFileName;&lt;br /&gt;
 	filetype.MakeUpper();&lt;br /&gt;
 &lt;br /&gt;
 	if(filetype.Find(&amp;quot;.BMP&amp;quot;) &amp;amp;gt; -1) return LoadBMP(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.TIF&amp;quot;) &amp;amp;gt; -1) return LoadTIF(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.GIF&amp;quot;) &amp;amp;gt; -1) return LoadGIF(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.JPG&amp;quot;) &amp;amp;gt; -1) return LoadJPG(lpszFileName);&lt;br /&gt;
 	else return FALSE;&lt;br /&gt;
 }&lt;br /&gt;
 BOOL CImage::LoadBMP(LPCTSTR lpszFileName)&lt;br /&gt;
 {&lt;br /&gt;
 	CFile file;&lt;br /&gt;
 	CFileException fe;&lt;br /&gt;
 	LPSTR pDIB;&lt;br /&gt;
 	DWORD dwBitsSize;&lt;br /&gt;
 	BITMAPFILEHEADER bmfHeader;&lt;br /&gt;
 &lt;br /&gt;
 	// 읽기 모드로 파일 열기&lt;br /&gt;
 	if(!file.Open(lpszFileName, CFile::modeRead|CFile::shareDenyWrite, &amp;amp;amp;fe))&lt;br /&gt;
 		return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 파일의 길이를 구함&lt;br /&gt;
 	dwBitsSize = file.GetLength();&lt;br /&gt;
 &lt;br /&gt;
 	// 파일 헤더 읽기&lt;br /&gt;
 	if(file.Read((LPSTR)&amp;amp;amp;bmfHeader, sizeof(bmfHeader))!=sizeof(bmfHeader))&lt;br /&gt;
 		return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// BMP 파일임을 나타내는 &amp;quot;BM&amp;quot; 마커가 있는지 확인&lt;br /&gt;
 	if (bmfHeader.bfType != DIB_HEADER_MARKER)&lt;br /&gt;
 		return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 할당&lt;br /&gt;
 	if((m_hImage = (HDIB)::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize)) == NULL) return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 고정&lt;br /&gt;
 	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hImage);&lt;br /&gt;
 &lt;br /&gt;
 	// 파일 읽기&lt;br /&gt;
 	if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) != dwBitsSize - sizeof(BITMAPFILEHEADER) ) &lt;br /&gt;
 	{&lt;br /&gt;
 		::GlobalUnlock((HGLOBAL) m_hImage);&lt;br /&gt;
 		::GlobalFree((HGLOBAL) m_hImage);&lt;br /&gt;
 		return FALSE;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 풀어줌&lt;br /&gt;
 	::GlobalUnlock((HGLOBAL) m_hImage);&lt;br /&gt;
 &lt;br /&gt;
 	// DIB 초기화&lt;br /&gt;
 	InitDIB();&lt;br /&gt;
 &lt;br /&gt;
 	return TRUE;&lt;br /&gt;
 }&lt;br /&gt;
 BOOL CImage::Save(LPCTSTR lpszFileName)&lt;br /&gt;
 {&lt;br /&gt;
 	CString filetype;&lt;br /&gt;
 	filetype = lpszFileName;&lt;br /&gt;
 	filetype.MakeUpper();&lt;br /&gt;
 &lt;br /&gt;
 	if(filetype.Find(&amp;quot;.BMP&amp;quot;) &amp;amp;gt; -1) return SaveBMP(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.TIF&amp;quot;) &amp;amp;gt; -1) return SaveTIF(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.GIF&amp;quot;) &amp;amp;gt; -1) return SaveGIF(lpszFileName);&lt;br /&gt;
 	else if(filetype.Find(&amp;quot;.JPG&amp;quot;) &amp;amp;gt; -1) return SaveJPG(lpszFileName);&lt;br /&gt;
 	else return FALSE;&lt;br /&gt;
 }&lt;br /&gt;
 BOOL CImage::SaveBMP(LPCTSTR lpszFileName)&lt;br /&gt;
 {&lt;br /&gt;
 	CFile file;&lt;br /&gt;
 	CFileException fe;&lt;br /&gt;
 	BITMAPFILEHEADER bmfHdr;&lt;br /&gt;
 	LPBITMAPINFOHEADER lpBI;&lt;br /&gt;
 	DWORD dwDIBSize;&lt;br /&gt;
 &lt;br /&gt;
 	// 쓰기 모드로 파일 열기&lt;br /&gt;
 	if (!file.Open(lpszFileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite, &amp;amp;amp;fe)) return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 핸들이 유효한지 확인&lt;br /&gt;
 	if (m_hImage == NULL) return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 고정&lt;br /&gt;
 	lpBI = (LPBITMAPINFOHEADER)::GlobalLock((HGLOBAL)m_hImage);&lt;br /&gt;
 	if (lpBI == NULL) return FALSE;&lt;br /&gt;
 &lt;br /&gt;
 	// 비트맵 파일 헤더 정보를 설정&lt;br /&gt;
 	bmfHdr.bfType = DIB_HEADER_MARKER;  // &amp;quot;BM&amp;quot;&lt;br /&gt;
 	dwDIBSize = *(LPDWORD)lpBI + ::PaletteSize((LPSTR)lpBI);&lt;br /&gt;
 	if((lpBI-&amp;amp;gt;biCompression==BI_RLE8) || (lpBI-&amp;amp;gt;biCompression==BI_RLE4))&lt;br /&gt;
 		dwDIBSize += lpBI-&amp;amp;gt;biSizeImage;&lt;br /&gt;
 	else &lt;br /&gt;
 	{&lt;br /&gt;
 		DWORD dwBmBitsSize;  // Size of Bitmap Bits only&lt;br /&gt;
 		dwBmBitsSize = WIDTHBYTES((lpBI-&amp;amp;gt;biWidth)*((DWORD)lpBI-&amp;amp;gt;biBitCount)) * lpBI-&amp;amp;gt;biHeight;&lt;br /&gt;
 		dwDIBSize += dwBmBitsSize;&lt;br /&gt;
 		lpBI-&amp;amp;gt;biSizeImage = dwBmBitsSize;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	bmfHdr.bfSize = dwDIBSize + sizeof(BITMAPFILEHEADER);&lt;br /&gt;
 	bmfHdr.bfReserved1 = 0;&lt;br /&gt;
 	bmfHdr.bfReserved2 = 0;&lt;br /&gt;
 	bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+lpBI-&amp;amp;gt;biSize + PaletteSize((LPSTR)lpBI);&lt;br /&gt;
 	TRY&lt;br /&gt;
 	{&lt;br /&gt;
 		// 비트맵 파일 헤더를 파일에 쓰기&lt;br /&gt;
 		file.Write((LPSTR)&amp;amp;amp;bmfHdr, sizeof(BITMAPFILEHEADER));&lt;br /&gt;
 		// 나머지 데이터를 파일에 쓰기&lt;br /&gt;
 		file.WriteHuge(lpBI, dwDIBSize);&lt;br /&gt;
 	}&lt;br /&gt;
 	CATCH (CFileException, e)&lt;br /&gt;
 	{&lt;br /&gt;
 		::GlobalUnlock((HGLOBAL) m_hImage);&lt;br /&gt;
 		THROW_LAST();&lt;br /&gt;
 	}&lt;br /&gt;
 	END_CATCH&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 풀어줌&lt;br /&gt;
 	::GlobalUnlock((HGLOBAL) m_hImage);&lt;br /&gt;
 	return TRUE;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== 모자이크 처리 부분 ===&lt;br /&gt;
 HDIB CMyImage::MosaicProcess()&lt;br /&gt;
 {&lt;br /&gt;
 	LPSTR pDIB;&lt;br /&gt;
 	LPSTR pPixels;&lt;br /&gt;
 	int i,j;&lt;br /&gt;
 	long lw;		// 실제 쓰여진 Width값입니다.&lt;br /&gt;
 	int avrcolor;	// 변환 후의 Color값입니다.&lt;br /&gt;
 &lt;br /&gt;
 	// 메모리 고정&lt;br /&gt;
 	pDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hImage);&lt;br /&gt;
 &lt;br /&gt;
 	//이미지데이타 처음 위치를 구합니다.&lt;br /&gt;
 	pPixels = DataBits(pDIB); &lt;br /&gt;
 &lt;br /&gt;
 	// 이미지 가로는 4의 배수로 저장됨으로 값을 더 더합니다.&lt;br /&gt;
 	lw = m_Size.cx + (m_Size.cx%4&amp;amp;gt;0?(4-m_Size.cx%4):0);&lt;br /&gt;
 &lt;br /&gt;
 	// 네칸의 픽셀값을 동일한 값으로 평균화 합니다.&lt;br /&gt;
 	for (i=0;i&amp;amp;lt;m_Size.cy;i+=2)&lt;br /&gt;
 	{&lt;br /&gt;
 		for (j=0;j&amp;amp;lt;m_Size.cx;j+=2)&lt;br /&gt;
 		{&lt;br /&gt;
 			avrcolor = 0;&lt;br /&gt;
 			avrcolor += (int)((BYTE *)pPixels)[i*lw+j];&lt;br /&gt;
 			avrcolor += (int)((BYTE *)pPixels)[i*lw+(j+1)];&lt;br /&gt;
 			avrcolor += (int)((BYTE *)pPixels)[(i+1)*lw+j];&lt;br /&gt;
 			avrcolor += (int)((BYTE *)pPixels)[(i+1)*lw+(j+1)];&lt;br /&gt;
 			avrcolor/=4;&lt;br /&gt;
 			((BYTE *)pPixels)[i*lw+j] = (char)avrcolor;&lt;br /&gt;
 			((BYTE *)pPixels)[i*lw+(j+1)] = (char)avrcolor;&lt;br /&gt;
 			((BYTE *)pPixels)[(i+1)*lw+j] = (char)avrcolor;&lt;br /&gt;
 			((BYTE *)pPixels)[(i+1)*lw+(j+1)] = (char)avrcolor;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	// 메모리 놓아줌&lt;br /&gt;
 	::GlobalUnlock((HGLOBAL) m_hImage);&lt;br /&gt;
 &lt;br /&gt;
 	return (HDIB)pDIB;&lt;br /&gt;
 }&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
=== 이미지 화일 읽고 쓰기 ===&lt;br /&gt;
&lt;br /&gt;
== 추정 요약 ==&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
== Thread ==&lt;br /&gt;
내 생각엔 SpikeSolution 과정에서 중복된 코드가 나올것 같고 나중에 이것들을 묶어서 단순한 설계를 구현시킬 수 있을 것 같다.&lt;br /&gt;
  오 신기하다. 이걸로 솔루션이 세개쯤인거네, 우리조는 선택도 할수 있네 대단한조 ;; --[[neocoin]]&lt;br /&gt;
&lt;br /&gt;
지금 위키 참 맘에 안드네.. BR테그 쓰는 법이 뭐라구? ㅡ.ㅡ &lt;br /&gt;
 ~cpp [[BR]]&lt;br /&gt;
이것, 하지만 쓰지 않고 얼마든지 방법이 ;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 관하여 ==&lt;br /&gt;
* 배포 계획 수립 회의&lt;br /&gt;
# 성공적인 제품을 정의하기 위해 충분한 스토리를 작성한다.&lt;br /&gt;
* 필요한 조사를 수행한다.&lt;br /&gt;
* 각 스토리 구현의 난이도를 추정한다.&lt;br /&gt;
* 스토리 구현 속도를 추정한다.&lt;br /&gt;
* 비즈니스 가치와 난이도에 기반하여 첫번째 배포를 하기 위한 스토리를 선택한다.&lt;br /&gt;
&lt;br /&gt;
* 코드의 공동 소유&lt;br /&gt;
&lt;br /&gt;
* 단순한 설계&lt;br /&gt;
# 모든 테스트를 실행한다.&lt;br /&gt;
* 모든 아이디어를 표현한다.&lt;br /&gt;
* 중복된 코드를 포함하지 않는다.&lt;br /&gt;
* 최소한의 클래스와 메소드를 가진다.&lt;br /&gt;
----&lt;br /&gt;
[[ProjectSemiPhotoshop]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>