Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/31: Рейтинг темы: голосов - 31, средняя оценка - 4.68
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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2006, 14:56
Ответы с готовыми решениями:

Панель с палитрой цветов. Как ею пользоваться в своем приложении
Необходима в программе использовать вот такую или аналогичную фичу: Парни, как называется эта штука и как ею пользоваться? Мне...

Какой-то БАГ с цветовой палитрой !?!?!
В дизайнере когда выбираю цвета для оформления любого объекта у меня палитра цветовая (имею ввиду цветные квадратики в выпадающем окошке)...

Чтение файла GIF. Перевод текста в HEX. Декодирование GIF анимации
Всем привет.. задача такая: Необходимо открыть файл GIF.. Например, как в этой статье про декодирование.. ...

3
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2007, 20:18
Помогаю со студенческими работами здесь

Как работать с Палитрой
У меня такой вопрос к примеру как с помощью палитры ColorSelect1 Можно изменить цвет текста в кнопке Button1 Пример пожалуйста. ...

Конвертер bmp из 8 бит в 24 с палитрой
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls,...

Формат файла TGA с палитрой
Нужно описание формата tga файла с палитрой, а именно как что записывать в файл. Делал по спецификации, видно что-то не то, не читают проги...

Программа работы с палитрой цветов
скажите пожалуйста как разработать программу работы с палитрой цветов

Окраска графика в соответствии с палитрой Colorbar
Доброго времени суток, уважаемые программисты! Задача такова: построить график (в барах) по значениям y1, y2 и y3. Данные значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
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
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru