Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Создание справочника Windows API

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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
Я так и понял.

Ответить

Страница: 1 |

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



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