Форум программистов, компьютерный форум, киберфорум
Assembler: Windows/protected mode
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/47: Рейтинг темы: голосов - 47, средняя оценка - 4.60
 Аватар для semiono
161 / 18 / 0
Регистрация: 14.09.2010
Сообщений: 472
Записей в блоге: 6
FASM

Загрузка PNG из ресурсов.

04.02.2011, 05:10. Показов 9943. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как загрузить картинку PNG/JPG поверх окна?
Лучше из секции ресурсов. Я встречал пример даже с альфаканалом, но всюду bmp!
Вот нашёл пример на masm32 с использованием GDI+
Однако, у меня ума не хватило переписать это в FASM
Я вообще не врубаюсь что делать с PROTO, и инклюды там всякие другие. :/
Помогите расшифровать под фасм? Или другой пример покажите если этот не удачный?

masm32
Hi,

I've written a small function that will allow you to load JPG/PNG images from resource using GDI+:

Code:
Assembler
1
2
3
4
5
6
7
    gdiplusLoadBitmapFromResource, hInstance, resourceName, resourceType, outImage
 
    where:
       hInstance      - the module handle where to load the resource
       resourceName   - the name or the ID of the resource
       resourceType   - string pointer that will indicate the type of the resource., e.g., "PNG",0
       outImage       - address of variable where to put the handle of loaded image
Here's how to use it:

1. Add the function gdiplusLoadBitmapFromResource to your program, or include
Assembler
1
gdiplusLoadBitmapFromResource.inc.
2. Add the proto (so you can use INVOKE to call gdiplusLoadBitmapFromResource):

Code:
Assembler
1
gdiplusLoadBitmapFromResource proto :HMODULE, :LPSTR, :LPSTR, :DWORD
3. Initialize GDI+ on your program's start

Code:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GdiplusStartupInput struc
    GdiplusVersion dd ?
    DebugEventCallback dd ?
    SuppressBackgroundThread BOOL ?
    SuppressExternalCodecs BOOL ?
GdiplusStartupInput ends
 
.data
    gdiplusToken dd ?
    gdiplusSInput GdiplusStartupInput <1, NULL, FALSE, FALSE>
 
.code
    invoke GetModuleHandle, 0
    mov hInstance, eax
    
    ; Initialize GDI+
    invoke GdiplusStartup, addr gdiplusToken, addr gdiplusSInput, NULL
4. In your resource script, add your image with specified type, something like:

Code:
Assembler
1
9000 PNG "myImage.png"
where 2000 is the ID of the resource, and PNG is the type

5. Add a null-terminated string entry to your data section for the type of resource, e.g., "PNG"

Code:
Assembler
1
2
3
.data
    pngImage dd NULL 
    pngType db "PNG", 0
6. Load the image using gdiplusLoadBitmapFromResource:

Code:
Assembler
1
invoke gdiplusLoadBitmapFromResource, hInstance, 9000, addr pngType, addr pngImage
7. When you're done using the image, dispose it using GdipDisposeImage function:

Code:
Assembler
1
invoke GdipDisposeImage, addr pngImage
8. Finally, shutdown GDI+ before you exit your program:

Code:
Assembler
1
invoke GdiplusShutdown, gdiplusToken
I hope you may find this useful.
See the attached sample program.

Cheers


Добавлено через 1 час 0 минут
сразу не увидел, там инклюд вложен был
...
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
include gdiplus.inc
 
IFNDEF GDIPLUS_LOADBITMAPFROMRESOURCE_INC
GDIPLUS_LOADBITMAPFROMRESOURCE_INC equ <1>
 
;
; Load JPG/PNG from resource using GDI+
;   Actually, this function can load any image format supported by GDI+
;
; by: Chris Vega
;
 
gdiplusLoadBitmapFromResource proc hInst:HMODULE, lpName:LPSTR, lpType:LPSTR, pBitmapFromStream:DWORD
 
        local rcRes:HRSRC
        local hResData:HRSRC
        local pResData:HANDLE
        local sizeOfRes:DWORD
        local hbuffer:HANDLE
        local pbuffer:DWORD
        local pIStream:DWORD
        local hIStream:DWORD
 
        ; ------------------------------------------------------------------
        ; STEP 1: Find the resource
        ; ------------------------------------------------------------------
        invoke  FindResource, hInst, lpName, lpType
        or              eax, eax
        jnz             @f
        jmp             gdiplusLoadBitmapFromResource@Close
@@:     mov             rcRes, eax
        
        ; ------------------------------------------------------------------
        ; STEP 2: Load the resource
        ; ------------------------------------------------------------------
        invoke  LoadResource, hInst, rcRes
        or              eax, eax
        jnz             @f
        ret             ; Resource was not loaded
@@:     mov             hResData, eax
 
        ; ------------------------------------------------------------------
        ; STEP 3: Create a stream to contain our loaded resource
        ; ------------------------------------------------------------------
        invoke  SizeofResource, hInst, rcRes
        or              eax, eax
        jnz             @f
        jmp             gdiplusLoadBitmapFromResource@Close
@@:     mov             sizeOfRes, eax
        
        invoke  LockResource, hResData
        or              eax, eax
        jnz             @f
        jmp             gdiplusLoadBitmapFromResource@Close
@@:     mov             pResData, eax
 
        invoke  GlobalAlloc, GMEM_MOVEABLE, sizeOfRes
        or              eax, eax
        jnz             @f
        jmp             gdiplusLoadBitmapFromResource@Close
@@:     mov             hbuffer, eax
 
        invoke  GlobalLock, hbuffer
        mov             pbuffer, eax
        
        invoke  RtlMoveMemory, pbuffer, hResData, sizeOfRes
        invoke  CreateStreamOnHGlobal, pbuffer, FALSE, addr pIStream
        or              eax, eax
        jz              @f
        jmp             gdiplusLoadBitmapFromResource@Close
@@:     
 
        ; ------------------------------------------------------------------
        ; STEP 4: Create an image object from stream
        ; ------------------------------------------------------------------
        invoke  GdipCreateBitmapFromStream, pIStream, pBitmapFromStream
        
        ; ------------------------------------------------------------------
        ; STEP 5: Free all used locks and resources
        ; ------------------------------------------------------------------
        invoke  GetHGlobalFromStream, pIStream, addr hIStream
        invoke  GlobalFree, hIStream
        invoke  GlobalUnlock, hbuffer
        invoke  GlobalFree, hbuffer
        
gdiplusLoadBitmapFromResource@Close:
        ret
gdiplusLoadBitmapFromResource endp
 
ENDIF
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2011, 05:10
Ответы с готовыми решениями:

Загрузка графических файлов из ресурсов
Есть один из способов загрузки файлов изображений из ресурсов при помощи библиотеки GDI+ Загружаешь файл в ресурсы. В файле...

Загрузка png из ресурсов.
Всем привет. Нужно из ресурсов в TImage загрузить png изображение. Для bmp примеров...

Загрузка png из файла ресурсов
Надо загрузить из ресурса изображение в формате png. В интернете нашел вот такой способ но для bmp var ResStream: TResourceStream; ...

7
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
04.02.2011, 05:10
semiono, masm32 ver10 в папке masm32\examples\exampl07\car использование jpg
Цитата Сообщение от semiono
не врубаюсь что делать с PROTO, и инклюды там всякие другие.
я обычно в таких случаях получаю ехе-файл и "потрошу" его при помощи ida и hiew32 и сверяюсь с исходным текстом
1
 Аватар для semiono
161 / 18 / 0
Регистрация: 14.09.2010
Сообщений: 472
Записей в блоге: 6
04.02.2011, 05:17  [ТС]
Я уже сам нашёл этот car.asm в masm дистрибутиве! asm + inc 500 строк кода с непонятными PROTO:
Был бы это фасм, я уверен раза в два меньше писанины было бы.
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
04.02.2011, 05:22
semiono, есть еще в "Сам себе Iczelion" #145-147 там обработка jpg на nasm (не пугайся синтаксис похож на FASM)
1
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
04.02.2011, 18:57
Вот немного кривой пример. PNG почему-то не загружает, зато с jpg работает.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
format PE GUI
entry start
 
include 'win32ax.inc'
 
interface IPicture,\
  QueryInterface,\
  AddRef,\
  Release,\
  get_Handle,\            ;(handle: OLE_HANDLE);
  get_hPal,\              ;(handle: OLE_HANDLE);
  get_Type,\              ;(typ: Smallint);
  get_Width,\             ;(width: OLE_XSIZE_HIMETRIC);
  get_Height,\            ;(height: OLE_YSIZE_HIMETRIC);
  Render,\                ;(dc: HDC;x,y,cx,cy: Longint;xSrc: OLE_XPOS_HIMETRIC;ySrc: OLE_YPOS_HIMETRIC;cxSrc: OLE_XSIZE_HIMETRIC;cySrc: OLE_YSIZE_HIMETRIC;rcWBounds: TRect);
  set_hPal,\              ;(hpal: OLE_HANDLE);
  get_CurDC,\             ;(dcOut: HDC);
  SelectPicture,\         ;(dcIn: HDC;hdcOut: HDC;bmpOut: OLE_HANDLE);
  get_KeepOriginalFormat,\;(fkeep: BOOL);
  put_KeepOriginalFormat,\;(fkeep: BOOL);
  PictureChanged,\
  SaveAsFile,\            ;(stream: IStream;fSaveMemCopy: BOOL;cbSize: Longint);
  get_Attributes          ;(dwAttr: Longint);
 
section '' code data import readable writeable executable
 
  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL',\
          olepro,'OLEPRO32.DLL',\
          ole,'OLE32.DLL'
 
  import kernel,\
         GlobalAlloc,'GlobalAlloc',\
         ExitProcess,'ExitProcess'
 
  import user,\
         CreateWindowEx,'CreateWindowExA',\
         SetWindowLong,'SetWindowLongA',\
         ValidateRect,'ValidateRect',\
         GetMessage,'GetMessageA',\
         DispatchMessage,'DispatchMessageA',\
         GetDC,'GetDC',\
         DefWindowProc,'DefWindowProcA',\
         GetClientRect,'GetClientRect'
 
  import ole,\
         CreateStreamOnHGlobal,'CreateStreamOnHGlobal'
 
  import olepro,\
         OleLoadPicture,'OleLoadPicture'
 
start:
  xor    ebx,ebx
  invoke CreateWindowEx,ebx,static,ebx,WS_VISIBLE+WS_OVERLAPPEDWINDOW,ebx,ebx,200,200,ebx,ebx,ebx,ebx
  mov    [msg.hwnd],eax
  invoke GetDC,eax
  mov    [DC],eax
 
  invoke  GlobalAlloc,ebx,imagesize
  mov     edi,eax
  mov     esi,image
  mov     ecx,imagesize
  rep     movsb
  invoke  CreateStreamOnHGlobal,eax,ebx,Stream
  invoke  OleLoadPicture,[Stream],imagesize,ebx,IID_IPicture,Picture
  cominvk Picture,get_Width,width
  cominvk Picture,get_Height,height
 
  stdcall WndProc,[msg.hwnd],WM_SIZE,ebx,ebx
  invoke  SetWindowLong,[msg.hwnd],GWL_WNDPROC,WndProc
  @@:invoke GetMessage,msg,ebx,ebx,ebx
     invoke DispatchMessage,msg
  jmp @b
 
WndProc:
  cmp dword[esp+8],WM_PAINT
  je  .wm_paint
  cmp dword[esp+8],WM_SIZE
  je  .wm_size
  cmp dword[esp+8],WM_CLOSE
  je  .wm_close
  jmp [DefWindowProc]
   .wm_size:invoke  GetClientRect,[msg.hwnd],Rect
  .wm_paint:cominvk Picture,Render,[DC],ebx,ebx,[Rect.right],[Rect.bottom],ebx,ebx,[width],[height],Rect
            invoke  ValidateRect,[msg.hwnd],ebx
            retn    16
  .wm_close:invoke  ExitProcess,ebx
 
image       file '1.jpg'
imagesize = $-image
 
IID_IPicture db 080h,009h,0F8h,07Bh,032h,0BFh,01Ah,010h,08Bh,0BBh,000h,0AAh,000h,030h,00Ch,0ABh
static       db 'STATIC'
width        rd 1
height       rd 1
DC           rd 1
msg          MSG
Stream       rd 1
Rect         RECT
Picture      IPicture
Добавлено через 5 минут
Об освобождении ресурсов я не заботился - ты уж как нибудь сам
1
 Аватар для semiono
161 / 18 / 0
Регистрация: 14.09.2010
Сообщений: 472
Записей в блоге: 6
05.02.2011, 02:47  [ТС]
Mikl___, где ты видел такие большие уроки? Там отсилы их 25~

murderer,
Как вывести на экран картинку в JPEG/GIF/PNG/др. формате?
7 способов как это сделать

...
Способ 1 (OleLoadPicture)
Самый "официальный" способ. Появился вместе с OLE32 и работает до сих пор. Функции OleLoadPicture(Ex) и OleLoadPicturePath умеют загружать картинки в формате BMP, GIF, JPEG, ICO, WMF, и EMF:
...
Достоинства: правильно работает с прозрачными картинками.
Недостатки: не поддерживает анимированный GIF (см. также CPicturEx). Не поддерживает PNG.

Способ 2 (GDI+)
Недостаток ::LoadImage() с лихвой исправили в GDI+. Объект Gdiplus::Image умеет загружать картинки в формате BMP, GIF, JPEG, PNG, TIFF, EXIF, WMF, и EMF:

Достоинства: понимает множество форматов, в том числе анимированный GIF, правильно работает с прозрачными картинками.
...
Способ 3 (IImgCtx)
Не так давно Майкрософт предоставила заголовочные и библиотечные файлы к объекту ImgCtx, появившемуся еще в Internet Explorer 4.0. Он умеет заргужать картинки в формате BMP, GIF, JPEG, ICO, WMF, EMF, PNG, XBM, ICO, TIFF и, возможно, некоторых других:

Достоинства: правильно работает с прозрачными и анимированными картинками. Понимает URL (даже res:// и sysimage://).
Недостатки: не поддерживает загрузку из IStream. Не умеет загружать файлы синхронно.

итд...
Всё на си было блин

Добавлено через 14 минут
@Mikl___ а я понял! # это номера сообщений ))) девушка там ничё!
2
4187 / 1835 / 220
Регистрация: 06.10.2010
Сообщений: 4,123
05.02.2011, 11:51
Способ 3 (IImgCtx)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
format PE GUI
entry start
 
include 'win32ax.inc'
 
CLSCTX_ALL        = 7
IMGCHG_SIZE       = 0x0001
IMGCHG_VIEW       = 0x0002
IMGCHG_COMPLETE   = 0x0004
IMGCHG_ANIMATE    = 0x0008
IMGCHG_MASK       = 0x000F
 
IMGLOAD_NOTLOADED = 0x00100000  ;Image has not yet been loaded
IMGLOAD_LOADING   = 0x00200000  ;Image in the process of being loaded
IMGLOAD_STOPPED   = 0x00400000  ;Imaged aborted
IMGLOAD_ERROR     = 0x00800000  ;Error loading image
IMGLOAD_COMPLETE  = 0x01000000  ;Image loaded
IMGLOAD_MASK      = 0x01F00000
 
IMGBITS_NONE      = 0x02000000
IMGBITS_PARTIAL   = 0x04000000
IMGBITS_TOTAL     = 0x08000000
IMGBITS_MASK      = 0x0E000000
 
IMGANIM_ANIMATED  = 0x10000000
IMGANIM_MASK      = 0x10000000
 
IMGTRANS_OPAQUE   = 0x20000000
IMGTRANS_MASK     = 0x20000000
 
DWN_COLORMODE     = 0x0000003F  ;Explicit color mode requested
DWN_DOWNLOADONLY  = 0x00000040  ;Download data only, don't decode
DWN_FORCEDITHER   = 0x00000080  ;Override automatic dithering
DWN_RAWIMAGE      = 0x00000100  ;Disable dithering
DWN_MIRRORIMAGE   = 0x00000200  ;Mirror the image
 
struct IID_IImgCtx
  db 0D7h,0F3h,050h,030h,0B5h,098h,0CFh,011h,0BBh,082h,000h,0AAh,000h,0BDh,0CEh,00Bh
ends
 
struct CLSID_IImgCtx
  db 0D6h,0F3h,050h,030h,0B5h,098h,0CFh,011h,0BBh,082h,000h,0AAh,000h,0BDh,0CEh,00Bh
ends
 
interface IImgCtx,\
    QueryInterface,\
    AddRef,\
    Release,\
    Load,\           ;(THIS_ LPCWSTR pszUrl, DWORD dwFlags) PURE;
    SelectChanges,\  ;(THIS_ ULONG ulChgOn, ULONG ulChgOff, BOOL fSignal) PURE;
    SetCallback,\    ;(THIS_ PFNIMGCTXCALLBACK pfn, void * pvPrivateData) PURE;
    Disconnect,\     ;(THIS) PURE;
    GetUpdateRects,\ ;(THIS_ struct tagRECT FAR* prc, struct tagRECT FAR* prcImg, long FAR* pcrc) PURE;
    GetStateInfo,\   ;(THIS_ ULONG FAR* pulState, struct tagSIZE FAR* psize, BOOL fClearChanges) PURE;
    GetPalette,\     ;(THIS_ HPALETTE FAR* phpal) PURE;
    Draw,\           ;(THIS_ HDC hdc, struct tagRECT FAR* prcBounds) PURE;
    Tile,\           ;(THIS_ HDC hdc, struct tagPOINT FAR* pptBackOrg, struct tagRECT FAR* prcClip, struct tagSIZE FAR* psize) PURE;
    StretchBlt       ;(THIS_ HDC hdc, int dstX, int dstY, int dstXE, int dstYE, int srcX, int srcY, int srcXE, int srcYE, DWORD dwROP) PURE;
 
section '' code data import readable writeable executable
 
  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL',\
          ole,'OLE32.DLL'
 
  import kernel,\
         Sleep,'Sleep',\
         ExitProcess,'ExitProcess'
 
  import user,\
         CreateWindowEx,'CreateWindowExA',\
         SetWindowLong,'SetWindowLongA',\
         ValidateRect,'ValidateRect',\
         GetMessage,'GetMessageA',\
         DispatchMessage,'DispatchMessageA',\
         GetDC,'GetDC',\
         DefWindowProc,'DefWindowProcA',\
         GetClientRect,'GetClientRect'
 
  import ole,\
         CoInitialize,'CoInitialize',\
         CoCreateInstance,'CoCreateInstance'
 
start:
  xor    ebx,ebx
  invoke CreateWindowEx,ebx,static,ebx,WS_VISIBLE+WS_OVERLAPPEDWINDOW,ebx,ebx,200,200,ebx,ebx,ebx,ebx
  mov    [msg.hwnd],eax
  invoke GetDC,eax
  mov    [DC],eax
 
  invoke  CoInitialize,ebx
  invoke  CoCreateInstance,CLSID_ImgCtx,ebx,CLSCTX_ALL,IID_ImgCtx,ImgCtx
  cominvk ImgCtx,Load,filename,ebx
 
  @@:cominvk ImgCtx,GetStateInfo,state,ebx,ebx
     test    [state],IMGLOAD_LOADING
  jne @b
 
  stdcall WndProc,[msg.hwnd],WM_SIZE,ebx,ebx
  invoke  SetWindowLong,[msg.hwnd],GWL_WNDPROC,WndProc
  @@:invoke GetMessage,msg,ebx,ebx,ebx
     invoke DispatchMessage,msg
  jmp @b
 
WndProc:
  cmp dword[esp+8],WM_PAINT
  je  .wm_paint
  cmp dword[esp+8],WM_SIZE
  je  .wm_size
  cmp dword[esp+8],WM_CLOSE
  je  .wm_close
  jmp [DefWindowProc]
   .wm_size:invoke  GetClientRect,[msg.hwnd],Rect
  .wm_paint:cominvk ImgCtx,Draw,[DC],Rect
            invoke  ValidateRect,[msg.hwnd],ebx
            retn    16
  .wm_close:invoke  ExitProcess,ebx
 
filename      du 'C:\1.png',0
CLSID_ImgCtx  CLSID_IImgCtx
IID_ImgCtx    IID_IImgCtx
static        db 'STATIC'
state         rd 1
DC            rd 1
msg           MSG
Rect          RECT
ImgCtx        IImgCtx
Добавлено через 1 час 44 минуты
Способ 2 (GDI+)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
format PE GUI
entry start
 
include 'win32ax.inc'
 
struct GdiplusStartupInput
    GdiplusVersion           dd ?
    DebugEventCallback       dd ?
    SuppressBackgroundThread dd ?
    SuppressExternalCodecs   dd ?
ends
 
UnitWorld      = 0
UnitDisplay    = 1
UnitPixel      = 2
UnitPoint      = 3
UnitInch       = 4
UnitDocument   = 5
UnitMillimeter = 6
 
section '' code data import readable writeable executable
 
  library kernel,'KERNEL32.DLL',\
          user,'USER32.DLL',\
          ole,'ole32.dll',\
          gdiplus,'gdiplus.dll'
 
  import kernel,\
         GlobalAlloc,'GlobalAlloc',\
         ExitProcess,'ExitProcess'
 
  import user,\
         CreateWindowEx,'CreateWindowExA',\
         SetWindowLong,'SetWindowLongA',\
         ValidateRect,'ValidateRect',\
         GetMessage,'GetMessageA',\
         DispatchMessage,'DispatchMessageA',\
         GetDC,'GetDC',\
         DefWindowProc,'DefWindowProcA',\
         GetClientRect,'GetClientRect'
 
  import ole,\
         CreateStreamOnHGlobal,'CreateStreamOnHGlobal'
 
  import gdiplus,\
         GdiplusStartup,'GdiplusStartup',\
         GdipCreateFromHWND,'GdipCreateFromHWND',\
         GdipCreateBitmapFromStream,'GdipCreateBitmapFromStream',\
         GdipGetImageWidth,'GdipGetImageWidth',\
         GdipGetImageHeight,'GdipGetImageHeight',\
         GdipDrawImageRectRectI,'GdipDrawImageRectRectI'
 
start:
  xor    ebx,ebx
  invoke CreateWindowEx,ebx,static,ebx,WS_VISIBLE+WS_OVERLAPPEDWINDOW,ebx,ebx,200,200,ebx,ebx,ebx,ebx
  mov    [msg.hwnd],eax
  invoke GdiplusStartup,gdiplusToken,gdiplusSInput,ebx
 
  invoke  GlobalAlloc,ebx,imagesize
  mov     edi,eax
  mov     esi,image
  mov     ecx,imagesize
  rep     movsb
  invoke  CreateStreamOnHGlobal,eax,ebx,Stream
 
  invoke  GdipCreateBitmapFromStream,[Stream],Bitmap
  invoke  GdipGetImageWidth,[Bitmap],width
  invoke  GdipGetImageHeight,[Bitmap],height
 
  stdcall WndProc,[msg.hwnd],WM_SIZE,ebx,ebx
  invoke  SetWindowLong,[msg.hwnd],GWL_WNDPROC,WndProc
  @@:invoke GetMessage,msg,ebx,ebx,ebx
     invoke DispatchMessage,msg
  jmp @b
 
WndProc:
  cmp dword[esp+8],WM_PAINT
  je  .wm_paint
  cmp dword[esp+8],WM_SIZE
  je  .wm_size
  cmp dword[esp+8],WM_CLOSE
  je  .wm_close
  jmp [DefWindowProc]
   .wm_size:invoke GetClientRect,[msg.hwnd],Rect
  .wm_paint:invoke GdipCreateFromHWND,[msg.hwnd],Graphics
            invoke GdipDrawImageRectRectI,[Graphics],[Bitmap],ebx,ebx,[Rect.right],[Rect.bottom],ebx,ebx,[width],[height],UnitPixel,ebx,ebx,ebx
            invoke ValidateRect,[msg.hwnd],ebx
            retn   16
  .wm_close:invoke ExitProcess,ebx
 
image       file '1.png'
imagesize = $-image
 
static        db 'STATIC'
gdiplusToken  rd 1
gdiplusSInput GdiplusStartupInput 1
Bitmap        rd 1
width         rd 1
height        rd 1
Graphics      rd 1
msg           MSG
Stream        rd 1
Rect          RECT
3
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16371 / 7683 / 1080
Регистрация: 11.11.2010
Сообщений: 13,757
07.02.2011, 06:18
Лучший ответ Сообщение было отмечено semiono как решение

Решение

Цитата Сообщение от semiono Посмотреть сообщение
))) девушка там ничё!
Я думал, что узнаешь -- это Анфиса Чехова
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2011, 06:18
Помогаю со студенческими работами здесь

Как загрузить png изображение из файла ресурсов
пробую так: Image1-&gt;Picture-&gt;RCDATA-&gt;LoadFromResourceName((int)HInstance, &quot;H_A&quot;); файл ресурсов создан из меню, тип ресурса RCDATA. ...

Загрузка файла png
Помогите поменять файл с gif на png. Пробовал по всякому, либо программа зависает, либо не компилируется( unit Unit1; interface ...

Загрузка png в TImage
У меня в программе png изображения загружаются из ресурсов в OnCreate. (использую компонент pngimage)Проблема в том, что изображений много...

Загрузка PNG из DLL
Здравствуйте. Раньше спокойно жил, храня bmp в dll (тип ресурса - точечный рисунок(BITMAP)) Возникла необходимость переехать на png,...

Загрузка png изображения
Не могу загрузить изображение в формате png. Использую библиотеку sfml. При запуске программы появляется множество символов, потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru