|
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
|
|
GIF с новой цветовой палитрой31.08.2006, 14:56. Показов 5956. Ответов 3
Метки нет (Все метки)
Недавно на работе возникла необходимость перелопатить несколько тысяч изображений, находящихся в БД из JPEGa в GIF с целью уменьшения занимаемого ими места. Но, если просто пересохранять с полной цветовой палитрой формата GIF (т.е. 256 цветов), то толка никакого не будет, т.е. размер не уменьшится. В связи с этим необходимо изменять цветовую палитру на более простую - монохромную и малоцветную, т.е. 2-10 цветов. В MSDN как раз есть статья на эту тему - <A title=http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q319061 href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q319061 How to save a .gif file with a new color table by using Visual C# (спасибо bazile за подсказку). Все бы в этой статье хорошо, да вот только пример написан на C# и комменты на английском. После небольшого обдумывания и разбора решил перевести ее на VB.NET. Ниже следует получившийся код. Производительность что на VB, что на C# - абсолютно одинаковая. <SPAN class=798341807-09082006>И еще. Если запускать из IDE, то будут жуткие тормоза (приблизительно в 10-15 раз). В релизе же, при запуске ЕХЕшника, работает достаточно быстро. Не фотошоп, конечно, но вполне приемлемо. К примеру, картинка размером 1024*768 обрабатывается в течение 2 секунд. </SPAN></P><SPAN class=798341807-09082006><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes Imports</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes System.Drawing.Imaging<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes Module</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes mdlGIF<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Function</SPAN> GetColorPalette(<SPAN style="COLOR: blue ByVal</SPAN> nColors <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue UInteger</SPAN>) <SPAN style="COLOR: blue As</SPAN> ColorPalette<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> bitscolordepth <SPAN style="COLOR: blue As</SPAN> PixelFormat = PixelFormat.Format1bppIndexed<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none < 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue If</SPAN> (nColors > 2) <SPAN style="COLOR: blue Then</SPAN> bitscolordepth = PixelFormat.Format4bppIndexed<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue If</SPAN> (nColors > 16) <SPAN style="COLOR: blue Then</SPAN> bitscolordepth = PixelFormat.Format8bppIndexed<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes 'Создаем новую картинку, чтобы своровать с нее палитру<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes bmp = <SPAN style="COLOR: blue New</SPAN> Bitmap(1, 1, bitscolordepth)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>pal = bmp.Palette <SPAN style="COLOR: green '</SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes Воруем</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes bmp.Dispose() <SPAN style="COLOR: green 'Заметаем следы<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Return</SPAN> pal<SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Отдаем палитру<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue En style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'создаем новый индексированый bitmap такого же размера, как и исходная картинка<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'в нем мы будем рисовать наш монохромный гиф с заданным количеством цветов<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> Width <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue Integer</SPAN> = img.Width<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> Height <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue Integer</SPAN> = img.Height<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'всегда используйте PixelFormat8bppIndexed потому как<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'именно этот формат нужен для GIF<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> bmp <SPAN style="COLOR: blue As</SPAN> Bitmap = <SPAN style="COLOR: blue New</SPAN> Bitmap(Width, _<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="mso-spacerun: yes </SPAN>Height, _<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>PixelFormat.Format8bppIndexed)<o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes bsp; </SPAN>Intensity = i * &HFF / (nColors - 1)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'если нужно, сделаем первый цвет прозрачным<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue If</SPAN> (i = 0 <SPAN style="COLOR: blue And</SPAN> fTransparent) <SPAN style="COLOR: blue Then</SPAN> Alpha = 0<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'задаем цвет<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>pal.Entries(i) = Color.FromArgb(<SPAN style="COLOR: blue CInt</SPAN>(Alpha), <SPAN style="COLOR: blue CInt</SPAN>(Intensity), <SPAN style="COLOR: blue CInt</SPAN>(Intensity), <SPAN style="COLOR: blue CInt</SPAN>(Intensity))<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Next<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'присваиваем палитру битмэпу<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>bmp.Palette = pal<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Далее будем использовать GetPixel для узнавания цвета <o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'пикселя в нужных координатах на исходной картинке, <o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'чтобы п rid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>g.Dispose()<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'далее самая интересная часть - прорисовка GIF<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'для начала получим объект BitmapData, точкам которого будем указывать<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'индексы цветов<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> bmd <SPAN style="COLOR: blue As</SPAN> BitmapData = _<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>bmp.LockBits(<SPAN style="COLOR: blue New</SPAN> Rectangle(0, 0, Width, Height), System.Drawing.Imaging.ImageLockMode.Wri teOnly, bmp.PixelFormat)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'в pixel будем класть цвет на текущих координатах<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> pixel <SPAN style="COLOR: blue As</SPAN> Color<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'luminance - некий коэффициент (а точнее - оттенок серого), <o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'рассчитываемый по определенной формуле для правильного цвета в оттенок серого.<o ></o ></SPAN></SPAN></P><P class=MsoNormal st style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'В эту переменную мы положим абсолютную величину Stride<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Dim</SPAN> Stride <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue UInteger</SPAN> = Math.Abs(bmd.Stride)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Бегаем по картинке, сверху-вниз слева-направо<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes For</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes row <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue UInteger</SPAN> = 0 <SPAN style="COLOR: blue To</SPAN> BmpCopy.Height - 1<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue For</SPAN> col <SPAN style="COLOR: blue As</SPAN> <SPAN style="COLOR: blue UInteger</SPAN> = 0 <SPAN style="COLOR: blue To</SPAN> BmpCopy.Width - 1<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-ansi-language: EN-US; mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="mso-spacerun: yes </SPAN></SPAN><SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New' mso-no-proof: yes 'получаем цвет текущего пикселя<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>pixel = BmpCopy.GetPixel(col, row)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'с помощью нехитрой формулы преобразовываем его в серый цвет<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes & mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue CByte</SPAN>(Int(luminance * (nColors - 1) / 255 + 0.5)))<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Next</SPAN> col<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue Next</SPAN> row<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Сохраняем изменения<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>bmp.UnlockBits(bmd)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Сохраняем<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>bmp.Save(FileName, ImageFormat.Gif)<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <o > </o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: green 'Убиваем объекты<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>BmpCopy.Dispose()<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN>bmp.Dispose()<o ></o ></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New' mso-no-proof: yes <SPAN style="mso-spacerun: yes </SPAN><SPAN style="COLOR: blue End</SPAN> <SPAN style="COLOR: blue Sub<o ></o ></SPAN></SPAN></P><P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none <SPAN style="FONT-SIZE: 10pt
0
|
|
| 31.08.2006, 14:56 | |
|
Ответы с готовыми решениями:
3
Какой-то БАГ с цветовой палитрой !?!?! Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации |
|
0 / 0 / 0
Регистрация: 31.08.2007
Сообщений: 3
|
|
| 31.08.2007, 19:29 | |
|
А как сделать что бы цвета картинки сохранились? Делаю изменение размера картинки с помощью данной функции, но картинка становится черно белой.
0
|
|
|
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
|
|
| 31.08.2007, 20:11 | |
|
screen, ты явно невнимательно прочитал описание функции. Она предназначена именно для сохранения изображения с новой палитрой без изменения размера. Набери в google запрос "resize image VB.NET" и используй один из найденных примеров.
0
|
|
|
0 / 0 / 0
Регистрация: 31.08.2007
Сообщений: 3
|
|
| 31.08.2007, 20:18 | |
|
Прочитал я внимательно, переделал эту функцию именно для смены размера GIF ихображения.
Вообще столкнулся с проблемой - из базы беру GIF картинку, меняю размер и после этого пропадает прозрачный фон, может быть знаешь как справиться с данной проблемой?
0
|
|
| 31.08.2007, 20:18 | |
|
Помогаю со студенческими работами здесь
4
Как работать с Палитрой Конвертер bmp из 8 бит в 24 с палитрой Формат файла TGA с палитрой Программа работы с палитрой цветов Окраска графика в соответствии с палитрой Colorbar Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|