0 / 0 / 0
Регистрация: 05.04.2007
Сообщений: 11
|
|
1 | |
StretchBLT Рисует черно-белое изображение08.05.2007, 20:21. Показов 1674. Ответов 4
Метки нет (Все метки)
Кто Знает почему SrtetchBlt рисует в ПикБоксе черно-белым?
Например Private Sub Picture1_Paint() Dim hdc As Long, myRect As RECT ,myBitMap As Long hdc = CreateCompatibleDC(Picture1.hdc) 'Создаем контекст GetClientRect Picture1.hwnd, myRect ' Определяем размеры myBitMap = CreateCompatibleBitmap(hdc, myRect.Right, myRect.Bottom) ' Создаем Bitmap SelectObject hdc, myBitMap 'Закрашиваем контекст Dim hBrush As Long hBrush = GetStockObject(WHITE_BRUSH) SelectObject(hdc, hBrush) PatBlt(hdc, 0, 0, myRect.Right, myRect.Bottom, PATCOPY) ' Рисуем линию Dim hPen As Long hPen = CreatePen(1, 3, RGB(255, 0, 0)) SelectObject hdc, hPen LineTo hdc, myRect.Right, myRect.Bottom ' Копируем в ПикБокс - Черно-Белое Изображение StretchBlt Picture1.hdc, 0, 0, myRect.Right, myRect.Bottom, hdc, 0, 0, myRect.Right, myRect.Bottom, vbSrcCopy DeleteObject hBrush DeleteObject hPen DeleteObject myBitMap DeleteDC hdc ' рисуем в пикбоксе - Цветное изображение Picture1.Line (0, Picture1.Height)-(Picture1.Width, 0), RGB(255, 0, 0) End Sub Программа на С++ (чистое API) рисует тоже черно-белое изображение Может что-то надо указать еще - какую-нибудь палитру, или...?
0
|
08.05.2007, 20:21 | |
Ответы с готовыми решениями:
4
Разработать программу, которая рисует на экране изображение светофора Разработать программу, которая рисует на экране изображение светофора Цветное изображение -> черно-белое Opencv черно-белое изображение |
Anri
|
|
13.05.2007, 12:59 | 2 |
Это извечная проблема программирования GDI, скажу сразу, как она решается я уже благополучно забыл за два года неиспользования С++, но вся фишка в том, что нужно настраивать Compatible Device Context. Еще повторю, к сожалению я это не так часто раньше делал, но вот помню, что плясал от функции DeviceCapabilities, типа, сначало нужно было что-то сделать с CreateCompatibleDC...
вот почитай в MSDN, начиная с этой главы: Memory Device Contexts The memory device context stores bitmapped images for a particular device. An application can create a memory device context by calling the CreateCompatibleDC function and supplying a handle that identifies a device context for a particular device. When the system processes this call, it creates a bitmap having a color format compatible with the original device. Because the bitmap is compatible with the given device, a memory device context is also sometimes referred to as a compatible device context. The original bitmap in a memory device context is simply a placeholder. Its dimensions are one pixel by one pixel. Before an application can begin drawing, it must select a bitmap with the appropriate width and height into the device context by calling the SelectObject function. Once the new bitmap is selected into the memory device context, an application can begin using the device context to store images. если посмотреть на мой диск, то это лежит в CevStudioMSDN9898VS1033GDI.chm::/devdoc/live/pdgrmm/devcons_0r1v.htm а если через инет, то на MS-ком сайте http://msdn.microsoft.com/library/psdk/gdi/devcons_3r77.htm |
Anri
|
|
13.05.2007, 13:23 | 3 |
Сорри, я не совесем внимательно просмотрел твой код . Приношу пардон.
А в отмеску, вот, прошелся по MS и нашел такие поги: Q111729 - BUG: StretchBlt() Does Not Perform Palette Translations http:// support.microsoft.com / support / kb / articles / Q111 / 7 / 29.asp http://msdn.microsoft.com/library/psdk/gdi/bitmaps_9cok.htm http://support.microsoft.com/support/kb/articles/Q168/7/43.ASP - а вот это особо рекомендую, там с режимами StrechBlt работают, можа в этом и загвоздка была? |
Anri
|
|
13.05.2007, 15:24 | 4 |
Во, вроде теперь нашел, то, что тебе надо, вот помню-же читал где-то, а где... вот полез по старым нычкам, там и вышел на адресок, он и на простом поиске на MSDN-Online нашелся влегкую:
http://msdn.microsoft.com/library/techart/msdn_interp.htm Короче там расписана вся процедура как работать с цветами (палитрами) - Stretching 256-Color Images Using Interpolation. А вообще-то я бы рекомендовал походить по той самой первой ссылке, потому как программирование GDI штука навороченная, лучше MFC юзать, но, само-собой, MFC из-под VB не сильно уж и поюзаешь . to smalig: и ни фига я не спамлю. я человеку помочь пытался. |
0 / 0 / 0
Регистрация: 05.04.2007
Сообщений: 11
|
|
31.05.2007, 17:46 [ТС] | 5 |
Спасибо Anri за помощь, но все оказалось намного проще
При создании совместимого контекста в памяти создается монохромный контекст в один пиксель. Дальнейшее поле деятельности определяет совместимый Bitmap - CreateCompatibleBitmap. Так уже получилось, что он у меня создавался совместимым с созданным контекстом (hdc), а не первоначальным (Picture1.hdc). Идиотская ошибка, так что приношу извенения за введение в заблуждение.
0
|
31.05.2007, 17:46 | |
31.05.2007, 17:46 | |
Помогаю со студенческими работами здесь
5
Черно-белое изображение на цветном ТВ Черно-белое изображение -> изображение в цвете Загрузить черно-белое изображение в массив Преобразовать цветное изображение в черно-белое Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |