Страница: 1 |
Страница: 1 |
Вопрос: Прозрачное изображение
Добавлено: 06.07.04 10:03
Автор вопроса: dNW
' Будем накладывать одну картинку на другую, с просвечиванием maskColor насквозь
' Нужно два пикчербокса, равных по размерам. Две картинки в одной папке с проектом. Имена картинок src.jpg и dest.jpg
Option Explicit
Dim maskColor As Long, src As PictureBox, dest As PictureBox
Private Declare Function GdiTransparentBlt Lib "gdi32.dll" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal width As Long, ByVal Height As Long, ByVal hSrcDC As Long, ByVal sX As Long, ByVal sY As Long, ByVal sWidth As Long, ByVal sHeight As Long, ByVal TranspColor As Long) As Boolean
Private Sub Command1_Click()
GdiTransparentBlt dest.hdc, 0, 0, dest.ScaleWidth, dest.ScaleHeight, src.hdc, 0, 0, src.ScaleWidth, src.ScaleHeight, maskColor
SavePicture dest.Image, App.Path & "\transparent.bmp" ' Ñîõðàíÿåì íàëîæåííîå
End Sub
Private Sub Form_Load()
maskColor = vbBlack ' Áóäåì ïðîñâå÷èâàòü ÷åðíûé öâåò
Set src = Picture1
Set dest = Picture2
src.ScaleMode = vbPixels
dest.ScaleMode = vbPixels
src.AutoRedraw = True
dest.AutoRedraw = True
src.Picture = LoadPicture(App.Path & "\src.jpg")
dest.Picture = LoadPicture(App.Path & "\dest.jpg")
End Sub
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 07.07.04 10:38
А, ну да. Еще нужна кнопка Command1, на которую в процессе работы проекта нужно будет, ...хм.., нажать
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 07.07.04 11:24
Этот способ глючный хотя бы по причине того, что он не работает в Win95 )
Но его приимущество в том что он наиболее простой...
Номер ответа: 3
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #3
Добавлено: 07.07.04 13:05
Ну вообще я читал, что лучше всего перед копированием писать DoEvents, и AutoRedraw не обязательно
А вообще-то VB6 писался в 98 году, после создания 95-того
Номер ответа: 4
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #4
Добавлено: 07.07.04 13:06
А я вообще видел пример рисования прозрачных изображений в книге "Изпользование Visual Basic 6"
В дрожь бросает
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 07.07.04 15:41
Иван человеков был простой человек, такой же как я или ты,
И если на пути встречалась гора, он не пытался ее обойти.
(по-моему гр. Nautilus)
Конечно мало кто сейчас пользуется Win95... но все же
Номер ответа: 6
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #6
Добавлено: 07.07.04 16:38
2sne: А есть функция TransparentBlt из msimg32.dll, она работает в вин95
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 07.07.04 17:44
а че она не документирована?
о ней в мсдн ни упоминания...
Номер ответа: 8
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #8
Добавлено: 07.07.04 18:40
Нет. Я задал тебе вопрос, я просто забыл поставить знак "?"
А вообще попробуй вызвать Declare Fucntion TransparentBlt lib "msimg32" с теми же параметрами, что GdiTransparentBlt. Должно сработать
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 07.07.04 19:16
Навряд-ли она есть в 95х... Хотя бы потому что в MSDN, dllка, идет с заголовком: New GDI32 Functionality
Сомневаюсь что кто-то бы назвал NEW то что было еще 10 лет назад...
Имеется в Win98_34.cab File
Msimg32.dll 53248 05/11/1998 20:01:00 5.00.1693.1
судя по вышенаписанному, она так же 98-го года выпуска )
Номер ответа: 10
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #10
Добавлено: 07.07.04 19:58
Хороше тебе с MSDN. Никак не могу найти себе эту вещь у нас тут, в Краснодаре
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 07.07.04 20:01
Если деньги переведешь, отошлю... все равно скоро на почту идти...
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 07.07.04 20:23
Пока он ещё не прислал, вот:
Platform SDK: Windows GDI
TransparentBlt
The TransparentBlt function performs a bit-block transfer of the color data corresponding to a rectangle of pixels from the specified source device context into a destination device context.
BOOL TransparentBlt(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int hHeightDest, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
UINT crTransparent // color to make transparent
);
Parameters
hdcDest
[in] Handle to the destination device context.
nXOriginDest
[in] Specifies the x-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nYOriginDest
[in] Specifies the y-coordinate, in logical units, of the upper-left corner of the destination rectangle.
nWidthDest
[in] Specifies the width, in logical units, of the destination rectangle.
hHeightDest
[in] Handle to the height, in logical units, of the destination rectangle.
hdcSrc
[in] Handle to the source device context.
nXOriginSrc
[in] Specifies the x-coordinate, in logical units, of the source rectangle.
nYOriginSrc
[in] Specifies the y-coordinate, in logical units, of the source rectangle.
nWidthSrc
[in] Specifies the width, in logical units, of the source rectangle.
nHeightSrc
[in] Specifies the height, in logical units, of the source rectangle.
crTransparent
[in] The RGB color in the source bitmap to treat as transparent.
Return Values
If the function succeeds, the return value is TRUE.
If the function fails, the return value is FALSE.
Windows NT/2000/XP: To get extended error information, call GetLastError.
Remarks
The TransparentBlt function works with compatible bitmaps (DDBs).
The TransparentBlt function supports all formats of source bitmaps. However, for 32 bpp bitmaps, it just copies the alpha value over. Use AlphaBlend to specify 32 bits-per-pixel bitmaps with transparency.
If the source and destination rectangles are not the same size, the source bitmap is stretched to match the destination rectangle. When the SetStretchBltMode function is used, the iStretchMode modes of BLACKONWHITE and WHITEONBLACK are converted to COLORONCOLOR for the TransparentBlt function.
The destination device context specifies the transformation type for the destination coordinates. The source device context specifies the transformation type for the source coordinates.
TransparentBlt does not mirror a bitmap if either the width or height, of either the source or destination, is negative.
Windows 98/Me, Windows 2000/XP: When used in a multiple monitor system, both hdcSrc and hdcDest must refer to the same device or the function will fail. To transfer data between DCs for different devices, convert the memory bitmap to a DIB by calling GetDIBits. To display the DIB to the second device, call SetDIBits or StretchDIBits.
Requirements
Windows NT/2000/XP: Included in Windows 2000 and later.
Windows 95/98/Me: Included in Windows 98 and later.
Header: Declared in Wingdi.h; include Windows.h.
Library: Use Gdi32.lib.
Номер ответа: 13
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #13
Добавлено: 08.07.04 07:32
Значит 95 поддерживает?
Номер ответа: 14
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #14
Добавлено: 08.07.04 11:40
Ты мало с этой справкой общался ))
Windows 95/98/Me: Included in Windows 98 and later.
Обращай внимание не на то что до ":", а после:
Included in Windows 98 and later.
Номер ответа: 15
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #15
Добавлено: 08.07.04 12:10
Я так и понял.