Сжимать скрины для передачи по сети

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 29 окт 2008.

  1. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Flasher
    > А even это аналог align'a ?
    Да. Оба обеспечивают выравнивание. У align можно указать кратность, а even просто до четного адреса. Для 32ух бит предпочтительнее align 4.
     
  2. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    можно битность цвета уменьшить или вообще в индексируемом виде оформить, или в гиф загнать (8 бит на цвет + lzw). Исходник гиф кодера оч маленький.
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    _basmp_, дай :))
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Flasher
    найду - дам. А чо в сети нету (тут по форуму, по фасмовому форуму)?
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Нашел http://www.wasm.ru/forum/attachment.php?item=1932
    Но там юзается gdi+
     
  6. ntp

    ntp New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2008
    Сообщения:
    30
    To Flasher
    Не читал все посты.
    Когда у меня была необходимость отсылать скрины по сети в реальном времени я использовал библиотеку от Intel ijl15.dll для конвертации 24 битного изображения в JPEG. С ней пример шел на C++. Все работало, хоть и проц прилично грузился.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    ntp
    Ужо забили. Юзайте libJpeg.
     
  8. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Могет кому будет интересно..
    Resize + decoder (вроди любой формат) на jpeg, функциями GDI+
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4. include \masm32\include\windows.inc
    5. include \masm32\include\user32.inc
    6. includelib \masm32\lib\user32.lib
    7. include \masm32\include\kernel32.inc
    8. includelib \masm32\lib\kernel32.lib
    9. include  \masm32\include\gdiplus.inc
    10. includelib \masm32\lib\gdiplus.lib
    11. include  \masm32\include\gdi32.inc
    12. includelib \masm32\lib\gdi32.lib
    13.  
    14. WIDTHH equ 720
    15. HEIGHT equ 576
    16.  
    17. GdiplusStartupInput STRUCT
    18.     GdiplusVersion DWORD ?
    19.     DebugEventCallback DWORD ?
    20.     SuppressBackgroundThread DWORD ?
    21.     SuppressExternalCodecs DWORD ?
    22. GdiplusStartupInput ENDS
    23.  
    24. ImageCodecInfo struct
    25.      Clsid              dd ?,?,?,?
    26.      FormatID           dd ?,?,?,?
    27.      CodecName          dd ?
    28.      DllName            dd ?
    29.      FormatDescription  dd ?
    30.      FilenameExtension  dd ?
    31.      MimeType           dd ?
    32.      Flags              dd ?
    33.      Version            dd ?
    34.      SigCount           dd ?
    35.      SigSize            dd ?
    36.      SigPattern         dd ?
    37.      SigMask            dd ?
    38. ImageCodecInfo ends
    39.  
    40. .data
    41. szFileName1 dw 's','a','m','p','l','e','.','b','m','p',0
    42. szFileName2 dw 'r','e','s','u','l','t','.','g','i','f',0
    43.  
    44. .code
    45. start proc
    46.     local HorRes:DWORD
    47.     local VerRes:DWORD
    48.     local imagen1:DWORD
    49.     local imagen2:DWORD
    50.     local lFormat:DWORD
    51.     local grafico:DWORD
    52.     local gditoken:DWORD
    53.     local hBitmap:DWORD
    54.     local gdisi:GdiplusStartupInput
    55.     local encnum,encsize,encinfo:dword
    56.  
    57.     mov gdisi.GdiplusVersion,1
    58.     and gdisi.DebugEventCallback,0
    59.     and gdisi.SuppressBackgroundThread,0
    60.     and gdisi.SuppressExternalCodecs,0
    61.     invoke GdiplusStartup,addr gditoken,addr gdisi,0
    62.     invoke GdipLoadImageFromFile,offset szFileName1,ADDR imagen1
    63.     invoke GdipGetImagePixelFormat,imagen1,addr lFormat
    64.     invoke GdipCreateBitmapFromScan0,WIDTHH,HEIGHT,0,lFormat,0,addr imagen2
    65.     invoke GdipGetImageHorizontalResolution,imagen1,addr HorRes
    66.     invoke GdipGetImageVerticalResolution,imagen1,addr VerRes
    67.     invoke GdipBitmapSetResolution,imagen2,HorRes,VerRes
    68.     invoke GdipGetImageGraphicsContext,imagen2,addr grafico
    69.     invoke GdipGraphicsClear,grafico,0
    70.     invoke GdipDrawImageRectI,grafico,imagen1,0,0,WIDTHH,HEIGHT
    71.     invoke GdipDisposeImage,imagen1
    72.     invoke GdipDeleteGraphics,grafico
    73.     invoke GdipCreateHBITMAPFromBitmap,imagen2,addr hBitmap,0
    74.  
    75.     invoke GdipGetImageEncodersSize,addr encnum,addr encsize
    76.     invoke VirtualAlloc,0,encsize,MEM_COMMIT,PAGE_READWRITE
    77.     mov encinfo,eax
    78.     invoke GdipGetImageEncoders,encnum,encsize,encinfo
    79.     mov ebx,encinfo
    80.   @@:
    81.      mov eax,[ebx.ImageCodecInfo.MimeType]
    82.      add ebx,sizeof ImageCodecInfo
    83.       .if byte ptr [eax+0] == 'i' &&\ ;image/jpeg
    84.           byte ptr [eax+2] == 'm' &&\
    85.           byte ptr [eax+10] == '/'&&\
    86.           byte ptr [eax+16] == 'e'
    87.           jmp @F
    88.       .endif
    89.      dec encnum
    90.      jnz @B
    91.   @@:
    92.      sub ebx,sizeof ImageCodecInfo
    93.      invoke GdipSaveImageToFile,imagen2,offset szFileName2,ebx,0
    94.      
    95.      invoke VirtualFree,encinfo,0,MEM_RELEASE
    96.     invoke GdipDisposeImage,imagen2
    97.     invoke GdiplusShutdown,gditoken
    98.     invoke ExitProcess,0
    99. start endp
    100. end start
     
  9. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Вообще тут один товарищ верно сказал, современные приложения используют похожесть картинок и тем самым пересылают лишь измененые ее части , прибавить к этому обыкновенную компрессию и получится очень даже ничего без потерь качества =)

    Почему так не катит ?
     
  10. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Могу подкинуть кусок кода, но на паскале, на функциях ГДИ создается jpg ну или любой другой формат, смотря какой кодек выберишь (через GUID)
    Если интересует!
    Писал когда-то прогу ВЕБКАМ-шпийон то задача была минимизировать бинарник и увеличичть скорость передачи снимков. Сначала парился с пакером БМПшек, а потом перестал изобретать велосипед, и сделал через АПИ
     
  11. dendi

    dendi New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    233
    gdi+ нет в 2000
     
  12. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Хз, я верю наслово т.к. под 2000 ничего не делал :)
     
  13. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Да, в 2k нет gdi+, но это не проблема, http://www.microsoft.com/downloads/details.aspx?FamilyId=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&displaylang=en есть.
    з.ы. Возможно и банальное закидывание gdiplus.dll в system32 поможет.
     
  14. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Никто не в курсе как это в remote desktop виндовом делается?.. там для картинки в 1024х768х16 хватает 128 kbps канала причём без тормозов.
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Microsoft изпользует RDP - Remote Desktop Protocol

    Никаких картинок не передается, а передаются фактически команды видеодрайверу.

    "On the server, RDP uses its own video driver to render display output by constructing the rendering information into network packets by using RDP protocol and sending them over the network to the client. On the client, RDP receives rendering data and interprets the packets into corresponding Microsoft Win32 graphics device interface (GDI) API calls. For the input path, client mouse and keyboard events are redirected from the client to the server. On the server, RDP uses its own on-screen keyboard and mouse driver to receive these keyboard and mouse events."
    http://msdn.microsoft.com/en-us/library/aa383015
     
  16. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    хм.. в мсдне скудное описание, а по подробнее - что за команды/интерфейсы/протоколы используются, где нибудь такая есть инфа?..
     
  17. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    Реверсить надо файл mstsc.exe .... а там уже протокол самому выяснять , писать автономный клиент , а далее делать зеркально сервер
     
  18. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    calidus
    ага, гуглил, гуглил нифига... видимо действительно придётся копаться вручную..
     
  19. calidus

    calidus Member

    Публикаций:
    0
    Регистрация:
    27 дек 2005
    Сообщения:
    618
    =) надо команду собрать для этой темы.
     
  20. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    Разбирать велосипед на части, чтобы изобрести (научится делать) велосипеды - это философия китайцев.. Дао?