Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: обесцвечивание картинки Добавлено: 19.09.04 15:28  

Автор вопроса:  Lister | ICQ: 298621256 
Народ, очень сильно нужен код для быстрой конвертации цветной картинки в оттенки серого. На сайте есть пример, но он ужасно тормозной.
А цель у меня такая: автоматом создавать из цветной "серую" картинку для тулбаровского DISABLEDIMAGELIST'а
А этот код ленту из 13 картинок конвертирует минуты 1,5-2 что для любого проекта неприемлемо

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #1 Добавлено: 19.09.04 15:35
Кстати, то что я хочу предпринять, реализовано в последних версиях TheBat!


Ответить

Номер ответа: 2
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #2 Добавлено: 19.09.04 16:57
GDI+ и ещё раз GDI+ !!!

Ответить

Номер ответа: 3
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #3 Добавлено: 19.09.04 17:24
а примерчика нет?

Ответить

Номер ответа: 4
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #4 Добавлено: 19.09.04 17:37
Готового на все сто - нет. Увы...
Сам бы стал делать так:
1. Идём на xtremevbtalk.com, в форум, ищем "Find all posts by user OnErr0r" в разделе, связанном с графикой.
2. В первой-второй десятке находим сообщение этого юзера с его аттачем "GdiPlus3.zip".
3. Качаем с сайта MS библиотеку gdiplus.dll, кладём её в папку проекта.
4. В проекте есть понижение цветности с 24-bit до 8-bit. Если поковыряться с GDI+ (MSDN), то можно найти, как вместе с понижением цветности в коде проекта перейти на серую палитру.

Но это всё теория, сам понимаешь :))

Ответить

Номер ответа: 5
Автор ответа:
 Black Dragon



ICQ: 321186096 

Вопросов: 30
Ответов: 347
 Web-сайт: в разработке
 Профиль | | #5
Добавлено: 19.09.04 19:37
А зачем тебе делать серую картинку для Тулбара в Runtime??? А почему бы тебе не сделать спокойно, ни куда не торопясь, серые картинки, и, потом, вставить их в DisabledImageList?

Ответить

Номер ответа: 6
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #6 Добавлено: 19.09.04 19:41
А я хочу сделать сменные картинки - так как в TheBat


Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 19.09.04 23:09
1. DrawState можно нарисовать картинку с т.н. эффектом emboss...
2. С пом. LoadImage можно загрузить картинку из ресурсов чернобелой...

Ответить

Номер ответа: 8
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #8 Добавлено: 20.09.04 02:47
А наврал я насчет скорости конвертирования картинки в примере, приведенном на
сайте :-/
Там идет преобразование цвета в каждом пикселе рисунка, а
я забыл поставить ScaleMode = vbPixel...


Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 20.09.04 05:58
BitBlt может обесцветить. Попробуй операцию
BLACKNESS = &H00000042

Ответить

Номер ответа: 10
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #10 Добавлено: 21.09.04 08:59
Это модуль ColorToGray переделанный и оптимизорованный мной (взято с сырцов,
кажется :) )

'Дата модификации 07.04.2004

Option Explicit
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long,
lpRect As RECT) As Long
Private Declare Function SetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal
x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal
x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long

Public Sub ColorToGray(hWnd As Long)
Dim bytR As Byte
Dim bytG As Byte
Dim bytB As Byte
Dim lngX As Long
Dim lngY As Long
Dim rctRect As RECT
Dim lngColor As Long
Dim Gray As Long
Dim lngDC As Long

GetWindowRect hWnd, rctRect
lngDC = GetDC(hWnd)

For lngX = 0 To rctRect.Right - rctRect.Left - 4
For lngY = 0 To rctRect.Bottom - rctRect.Top - 4
lngColor = GetPixel(lngDC, lngX, lngY)
bytR = lngColor And &HFF
bytG = (lngColor \ 256) And &HFF
bytB = (lngColor \ 65536) And &HFF
Gray = bytR * 0.3 + bytG * 0.59 + bytB * 0.11
lngColor = RGB(Gray, Gray, Gray)
SetPixel lngDC, lngX, lngY, lngColor
Next lngY
Next lngX
End Sub


Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам