forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   Скачка и загузка картинки (http://forum.boolean.name/showthread.php?t=1196)

impersonalis 27.07.2006 18:36

Скачка и загузка картинки
 
Картинка скачивается в память и на основе полученной информации создаётся image-объект Blitz-а. Без всяких свопов на винт (виндовые в расчёт не берём).
Код:

Graphics 640,480,32,2
SetBuffer BackBuffer()

Image = LoadBMPImage("http://mariusrabung.ma.funpic.de/Temp/TestImage.bmp")

DrawImage Image,0,0
Flip
WaitKey
EndGraphics
End


Function LoadBMPImage(Url$)

Local bfType%
Local bfSize%
Local bfReserved%
Local bfOffBits%

Local biSize%
Local biWidth%
Local biHeight%
Local biPlanes%
Local biBitCount%
Local biCompression%
Local biSizeImage%
Local biXPelsPerMeter%
Local biYPelsPerMeter%
Local biClrUsed%
Local biClrImportant%

Local biMaskRed%
Local biMaskGreen%
Local biMaskBlue%

Local biDown%

Local ClrTable%[256]


Local host$, host_tmp

 host$=right(Url$,len(Url$)-7)            ; http:// rausschneiden
 host_tmp=instr(host$,"/")-1              ; Das erste Slash im String suchen und 1 abziehen
 host$=left(host$,host_tmp)                ; Den Text bis zu dem ersten Slash-1 k?rzen

Local stream=opentcpstream(host$,80)

WriteLine stream, "GET "+url$
WriteLine stream, "Host: "+host$
WriteLine stream, ""

;----------------------- Bitmap Header
bfType%          = ReadShort(stream)
bfSize%          = ReadInt(stream)
bfReserved%      = ReadInt(stream)
bfOffBits%      = ReadInt(stream)
;-----------------------
If bfType% <> 19778 Then RuntimeError("Error: File ist not a valid Windows Bitmap(.bmp)")
;----------------------- Bitmap InfoHeader
biSize%          = ReadInt(stream)
biWidth%        = ReadInt(stream)
biHeight%        = ReadInt(stream)
biPlanes%        = ReadShort(stream)
biBitCount%      = ReadShort(stream)
biCompression%  = ReadInt(stream)
biSizeImage%    = ReadInt(stream)
biXPelsPerMeter% = ReadInt(stream)
biYPelsPerMeter% = ReadInt(stream)
biClrUsed%      = ReadInt(stream)
biClrImportant%  = ReadInt(stream)

If biHeight%>0 Then biDown%=0
If biHeight%<0 Then biDown%=1
;---------------------- evt. Farbmasken
If biCompression%=3 Then
 biMaskBlue%    = ReadInt(stream)
 biMaskGreen%    = ReadInt(stream)
 biMaskBlue%    = ReadInt(stream)
EndIf
;---------------------- FarbTabellen
If biClrUsed%=0 Then
 If biBitCount%=1 Or biBitCount%=4 Or biBitCount%=8 Then
  For tmp=0 To 2^biBitCount%
    ClrTable[tmp] = ReadInt(stream);Byte(stream)+ReadByte(stream)+ReadByte(stream)+ReadByte(stream)
  Next   
 EndIf
EndIf
;---------------------- BildDaten
Local img=CreateImage( biWidth%,biHeight% )
SetBuffer ImageBuffer(img)

;Print clrtable[0]
;Print clrtable[1]
;Print clrtable[2]
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)
;Print ReadByte(stream)

;Print biCompression%
;Print biBitCount%
;Print biDown%
;Print biHeight%
;Print biclrUsed%
;Print biclrimportant%

If biCompression%=0 Then  ; BI-RGB
 If biBitCount% = 1 Then
  If biDown% = 0 Then
    For tmp2=biHeight% To 0 Step -1
    For tmp=0 To biWidth% ;Step -1
    pixel=readbyte(stream)
    LockBuffer ImageBuffer(img)
      If pixel<>0 Then WritePixelFast tmp,tmp2,$FFFFFF
      If pixel=0  Then WritePixelFast tmp,tmp2,$000000 
    UnlockBuffer ImageBuffer(img)
     
    Next
  Next
  ElseIf biDown%=1 Then
  For tmp2=0 To biHeight%
    For tmp=0 To biWidth%
    pixel=readbyte(stream)
    LockBuffer ImageBuffer(img)
      If pixel<>0 Then WritePixelFast tmp,tmp2,$FFFFFF
      If pixel=0  Then WritePixelFast tmp,tmp2,$000000
    UnlockBuffer ImageBuffer(img)   
    Next
  Next
  EndIf
 ElseIf biBitCount% = 4
 
 ElseIf biBitCount% = 8
 
 ElseIf biBitCount% = 16
 
 ElseIf biBitCount% = 24 Then
  If biDown% = 0 Then
  For tmp2=biHeight% To 0 Step -1
    For tmp=0 To biWidth%
    blue=ReadByte(stream)
    green=ReadByte(stream)
    red=Readbyte(stream)
    ;Color red,green,blue
    LockBuffer ImageBuffer(img)
      rgb=255*$1000000 + red*$10000 + green*$100 + blue
      WritePixelFast tmp,tmp2,rgb
    UnlockBuffer ImageBuffer(img)
    ;Plot tmp,tmp2
    Next
  Next
  ElseIf biDown%=1 Then
  For tmp2=0 To biHeight%
    For tmp=0 To biWidth%
    blue=ReadByte(stream)
    green=ReadByte(stream)
    red=Readbyte(stream)
    ;Color red,green,blue
      LockBuffer ImageBuffer(img)
      rgb=255*$1000000 + red*$10000 + green*$100 + blue
      WritePixelFast tmp,tmp2,rgb
      UnlockBuffer ImageBuffer(img)   
    ;Plot tmp,tmp2
    Next
  Next
  EndIf
 ElseIf BiBitCount% = 32
 
 Endif 
ElseIf biCompression%=1 ; BI-RLE8

ElseIf biCompression%=2 ; BI-RLE4

ElseIf biCompression%=3 ; BI-BITFIELD

EndIf


SetBuffer BackBuffer()

Return img
CloseTCPStream stream
End Function

Код взят от сюда:
http://www.freecoder.chat-blitz.de/

impersonalis 27.07.2006 18:49

Re: Скачка и загузка картинки
 
Подозреваю, что всё-таки имелось в виду:

Код:

CloseTCPStream stream
Return img
End Function

задал вопрос автору. жду ответа =)

impersonalis 27.07.2006 21:17

Re: Скачка и загузка картинки
 
Я оказался прав )


Часовой пояс GMT +4, время: 07:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot