Что нового

затянуть в скрипт для оббработки картинку из инета

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
OffTopic:
Всех, кто застал то время, с праздником!
:shooting2: :shooting1:


Такая ситуация.
Беру картинку с инета
Код:
InetGet ( "http://..." , @scriptdir&"\tmp.gif" )


А потом её же затягиваю для поиска пикселей в ней
Код:
$hImage = _GDIPlus_ImageLoadFromFile(@scriptdir&"\tmp.gif")
   $iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
   $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)


А можно сделать это как-то не через .... диск, а напрямую?
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
C2H5OH

Код:
InetRead ( "URL" [, options] )



Добавлено:
Сообщение автоматически объединено:

C2H5OH
Решая твою задачу, случайно, натолкнулся на решение своей... :smile:
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
ммм... вот так?
Код:
$hImage =InetRead ( "URL")
   $iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
   $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
C2H5OH
Учитывая, что по-умолчанию загружаются бинарные данные, то это будет аналогично загрузке картинки в бинарном режиме из файла...
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ничего у меня не получается...
Код:
#include <GDIPlus.au3>
#include <IE.au3>

$oIE = _IECreate("http://ya.ru/",1)
$oImg = _IEImgGetCollection($oIE,0)

$hImageBin = InetRead ($oImg.src)
Local $nBytesRead = @extended
MsgBox(4096, "", "Bytes read: " & $nBytesRead )

По количеству байт считана именно та картинка что нужно.

Но дальше что делать? Как эту кртинку преобразовать в битмап?
Чтобы хотя бы размер определился!
Код:
$iX = _GDIPlus_ImageGetWidth ($hBitmap)
   $iY = _GDIPlus_ImageGetHeight ($hBitmap)

А то у меня всё время размер -1 и -1
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
C2H5OH,
Нашел у себя рабочий пример.
Код:
#Include <GDIPlus.au3>
#Include <Memory.au3>
#Include <WinAPIEx.au3>
;#include <IE.au3>

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173
Global $hForm, $Pic, $hPic, $hBitmap, $hObj, $hImage, $hStream, $bData, $hData, $pData, $tData, $Width, $Height, $Lenght

;$oIE = _IECreate('bwc.ru/cgi-bin/smssend.cgi')
;$oCap = _IEGetObjById($oIE ,'code_img')
;$bData = InetRead($oCap.src, 17)
$bData = InetRead('http://www.google.ru/logos/2012/bram-stoker-2012-hp.jpg', 17)
$Lenght = BinaryLen($bData)
$hData = _MemGlobalAlloc($Lenght, 2)
$pData = _MemGlobalLock($hData)
$tData = DllStructCreate('byte[' & $Lenght & ']', $pData)
DllStructSetData($tData, 1, $bData)
_MemGlobalUnlock($hData)
$hStream = _WinAPI_CreateStreamOnHGlobal($hData)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromStream($hStream)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$Width = _GDIPlus_ImageGetWidth($hImage)
$Height = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

$hForm = GUICreate($Width & 'x' & $Height, $Width + 100, $Height + 100)
$Pic = GUICtrlCreatePic('', 10 , 10)
$hPic = GUICtrlGetHandle($Pic)

_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
$hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
EndIf

GUISetState()

Do
Until GUIGetMsg() = -3

Func _GDIPlus_BitmapCreateFromStream($hStream)
    Local $aResult = DllCall($ghGDIPDll, 'uint', 'GdipCreateBitmapFromStream', 'ptr', $hStream, 'int*', 0)
    If @error Then
        Return SetError(@error, @extended, 0)
    EndIf
    Return $aResult[2]
EndFunc   ;==>_GDIPlus_BitmapCreateFromStream
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
C2H5OH
Мне кажется, что картинка просто не закачалась... Я вот попробовал прямую ссылку взять на картинку, сохранил в файл, и получилась полноценная PNG-шка...

Код:
$hImageBin = InetRead ('http://yandex.st/www/1.359/yaru/i/logo.png')
MsgBox(0,'',$hImageBin)
$OPEN=FileOpen('logo.png',2+16)
FileWrite($OPEN,$hImageBin)
FileClose($OPEN)
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
snoitaleR, madmasles,
Спасибо!
Вчера я успешно нарисовал карту местности, вытаскиивая миникарту в разных локациях. :smile:
Жаль что акция разовая и дальнейшего применения такой скрипт не имеет.
 
Верх