Flasher > А even это аналог align'a ? Да. Оба обеспечивают выравнивание. У align можно указать кратность, а even просто до четного адреса. Для 32ух бит предпочтительнее align 4.
можно битность цвета уменьшить или вообще в индексируемом виде оформить, или в гиф загнать (8 бит на цвет + lzw). Исходник гиф кодера оч маленький.
To Flasher Не читал все посты. Когда у меня была необходимость отсылать скрины по сети в реальном времени я использовал библиотеку от Intel ijl15.dll для конвертации 24 битного изображения в JPEG. С ней пример шел на C++. Все работало, хоть и проц прилично грузился.
Могет кому будет интересно.. Resize + decoder (вроди любой формат) на jpeg, функциями GDI+ Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib include \masm32\include\gdiplus.inc includelib \masm32\lib\gdiplus.lib include \masm32\include\gdi32.inc includelib \masm32\lib\gdi32.lib WIDTHH equ 720 HEIGHT equ 576 GdiplusStartupInput STRUCT GdiplusVersion DWORD ? DebugEventCallback DWORD ? SuppressBackgroundThread DWORD ? SuppressExternalCodecs DWORD ? GdiplusStartupInput ENDS ImageCodecInfo struct Clsid dd ?,?,?,? FormatID dd ?,?,?,? CodecName dd ? DllName dd ? FormatDescription dd ? FilenameExtension dd ? MimeType dd ? Flags dd ? Version dd ? SigCount dd ? SigSize dd ? SigPattern dd ? SigMask dd ? ImageCodecInfo ends .data szFileName1 dw 's','a','m','p','l','e','.','b','m','p',0 szFileName2 dw 'r','e','s','u','l','t','.','g','i','f',0 .code start proc local HorRes:DWORD local VerRes:DWORD local imagen1:DWORD local imagen2:DWORD local lFormat:DWORD local grafico:DWORD local gditoken:DWORD local hBitmap:DWORD local gdisi:GdiplusStartupInput local encnum,encsize,encinfo:dword mov gdisi.GdiplusVersion,1 and gdisi.DebugEventCallback,0 and gdisi.SuppressBackgroundThread,0 and gdisi.SuppressExternalCodecs,0 invoke GdiplusStartup,addr gditoken,addr gdisi,0 invoke GdipLoadImageFromFile,offset szFileName1,ADDR imagen1 invoke GdipGetImagePixelFormat,imagen1,addr lFormat invoke GdipCreateBitmapFromScan0,WIDTHH,HEIGHT,0,lFormat,0,addr imagen2 invoke GdipGetImageHorizontalResolution,imagen1,addr HorRes invoke GdipGetImageVerticalResolution,imagen1,addr VerRes invoke GdipBitmapSetResolution,imagen2,HorRes,VerRes invoke GdipGetImageGraphicsContext,imagen2,addr grafico invoke GdipGraphicsClear,grafico,0 invoke GdipDrawImageRectI,grafico,imagen1,0,0,WIDTHH,HEIGHT invoke GdipDisposeImage,imagen1 invoke GdipDeleteGraphics,grafico invoke GdipCreateHBITMAPFromBitmap,imagen2,addr hBitmap,0 invoke GdipGetImageEncodersSize,addr encnum,addr encsize invoke VirtualAlloc,0,encsize,MEM_COMMIT,PAGE_READWRITE mov encinfo,eax invoke GdipGetImageEncoders,encnum,encsize,encinfo mov ebx,encinfo @@: mov eax,[ebx.ImageCodecInfo.MimeType] add ebx,sizeof ImageCodecInfo .if byte ptr [eax+0] == 'i' &&\ ;image/jpeg byte ptr [eax+2] == 'm' &&\ byte ptr [eax+10] == '/'&&\ byte ptr [eax+16] == 'e' jmp @F .endif dec encnum jnz @B @@: sub ebx,sizeof ImageCodecInfo invoke GdipSaveImageToFile,imagen2,offset szFileName2,ebx,0 invoke VirtualFree,encinfo,0,MEM_RELEASE invoke GdipDisposeImage,imagen2 invoke GdiplusShutdown,gditoken invoke ExitProcess,0 start endp end start
Вообще тут один товарищ верно сказал, современные приложения используют похожесть картинок и тем самым пересылают лишь измененые ее части , прибавить к этому обыкновенную компрессию и получится очень даже ничего без потерь качества =) Почему так не катит ?
Могу подкинуть кусок кода, но на паскале, на функциях ГДИ создается jpg ну или любой другой формат, смотря какой кодек выберишь (через GUID) Если интересует! Писал когда-то прогу ВЕБКАМ-шпийон то задача была минимизировать бинарник и увеличичть скорость передачи снимков. Сначала парился с пакером БМПшек, а потом перестал изобретать велосипед, и сделал через АПИ
Да, в 2k нет gdi+, но это не проблема, http://www.microsoft.com/downloads/details.aspx?FamilyId=6A63AB9C-DF12-4D41-933C-BE590FEAA05A&displaylang=en есть. з.ы. Возможно и банальное закидывание gdiplus.dll в system32 поможет.
Никто не в курсе как это в remote desktop виндовом делается?.. там для картинки в 1024х768х16 хватает 128 kbps канала причём без тормозов.
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
хм.. в мсдне скудное описание, а по подробнее - что за команды/интерфейсы/протоколы используются, где нибудь такая есть инфа?..
Реверсить надо файл mstsc.exe .... а там уже протокол самому выяснять , писать автономный клиент , а далее делать зеркально сервер
Разбирать велосипед на части, чтобы изобрести (научится делать) велосипеды - это философия китайцев.. Дао?