Forum | | | | - page 1 - |
| Christian Eichler | comment toujours hab je un Problem : comment peux je plusieurs (!) Memory-Bitmaps dans Profan² 6.6 erstellen ? avec MCLS peux la fois oui une erstellen, mais pas plusieurs ... Allerdings voudrais je qui Bilder ensuite pas sur qui Festplatte zwischenspeichern (seulement dass aucun sur qui concept venez, mir trop dire je soll mir SaveBmp et LoadBmp travailler )
mon 1. concept : WinAPI : Befehl (meiner attitude pour qui richtige) trouvé, incorporé, faute.
qui Quellcode :
comme Fehlermeldung venez là ensuite, cela cela Bild test.bmp pas gespeichert volonté konnte . comment bekomm je dass zum courir, dass je dans Profan (ggf. sur qui WinAPI) plusieurs Memory-Bitmaps erstelle et puis aussi zugreifen peux ?
mfg euer toujours komische Frangen stellender Christian ! |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 20.07.2007 ▲ |
| |
| | | | | - page 1 - |
| Christian Eichler | 640*480 était pas possible, mais Screenshot ist quand même dabei
qui feine ligne number, qui du warscheinlich sans lunettes garnet vois soll den Graph représenter
|
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 20.07.2007 ▲ |
| |
| | | Liegt qui Wertebereich unterhalb eines Longs ou bien Floats? |
| | | | |
| | | | - page 2 - |
| | Nico Madysa | chez 6000*3000 Pixeln sicherlich |
| | | | |
| | | Liegt qui Wertebereich unterhalb eines Longs ou bien Floats? |
| | | | |
| | Christian Eichler | qui Wertebereich de quoi ?
sur dem Bild naturellement im Long ... chez qui Definitions et Wertemenge des Graphen dans Float ... Wobei je dire muss, dass je qui Floatwerte seulement umrechne et ensuite direct aufs papier zeichne, alors pas speichere ! je grenier eigentlich gar aucun Werte, wären sowieso trop viele !
Hilft dir cela plus ? |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 21.07.2007 ▲ |
| |
| | Andreas Miethe
| allô Chistian,
trop Deinem Code : Début de peinture leitet qui Ausgabe sur un d'autre la fenêtre ou bien Contrôle um, pas sur un DC, peux alors pas marcher.
si Du avec API travailler veux ensuite musst Du cela aussi avec API-Zeichenfunktionen faire, avec den Profan-Zeichenfunktionen peux Du ensuite rien anfangen.
ici un Beispiel, dass un Speicherbitmap anlegt, une ligne number et une Kurve puis zeichnet, et cela Ganze ensuite im Profanfenster anzeigt. sur cet Art peux Du ensuite aussi plusieurs Speicherbitmaps anlegen et Montrer.
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @SelectObject(2) !gdi32.dll,SelectObject
Def @ReleaseDC(2) !user32.dll,ReleaseDC
Def @DeleteDC(1) !gdi32.dll,DeleteDC
Def @BitBlt(9) !gdi32.dll,BitBlt
Def @PolyLineTo(3) !gdi32.dll,PolylineTo
Def @PolyBezierTo(3) !gdi32.dll,PolyBezierTo
Def @LineTo(3) !gdi32.dll,LineTo
Def @MoveToEx(4) !gdi32.dll,MoveToEx
Def @CreatePen(3) !gdi32.dll,CreatePen
Def @FloodFill(4) !gdi32.dll,FloodFill
Def @GetDC(1) !user32.dll,GetDC
Def @ReleaseDC(2) !user32.dll,ReleaseDC
Def @DeleteObject(1) !gdi32.dll,DeleteObject
SetTrueColor 1
CLS
Déclarer dc&,test&,pen&,Points#
Laisser dc& = @CreateCompatibleDC(%hdc) DeviceContext erzeugen
Laisser test& = @CreateCompatibleBitmap(%HDC,640,480)hBitmap erzeugen
Laisser pen& = @CreatePen(0,1,RGB(0,0,255))Pen zum zeichnen erzeugen
@SelectObject(dc&,test&)hBitmap dans DeviceContext
@SelectObject(dc&,pen&)Pen dans DeviceContext
@FloodFill(dc&,0,0,RGB(255,255,255))hBitmap weiss füllen
@MoveToEx(dc&,0,0,0) zum Startpunkt
@LineTo(dc&,Width(%hwnd),Height(%hwnd))ligne number marque
Struktur avec Punkten anlegen ( dans diesem le cas 3 Punkte )
Faible Points#,24
1. Punkt
Long Points#,0 = 0 X
Long Points#,4 = 0 Y
2. Punkt
Long Points#,8 = Width(%hwnd)/2
Long Points#,12 = Height(%hwnd)*2
2. Punkt
Long Points#,16 = Width(%hwnd)
Long Points#,20 = 0
@MoveToEx(dc&,0,0,0)zum Startpunkt
@PolyBezierTo(dc&,Points#,3)Bezier-Kurve aus Punkt-Struktur
@BitBlt(%hdc,0,0,640,480,dc&,0,0,$CC0020)hBitmap sur CLS-la fenêtre Montrer
@BitBlt(%hdc2,0,0,640,480,dc&,0,0,$CC0020)Hbitmap aussi zum Sicherungs-DC
grenier aufräumen
Dispose Points#
@DeleteObject(test&)
@DeleteObject(pen&)
@DeleteDC(dc&)
Tandis que 1
Endwhile
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.07.2007 ▲ |
| |
| | Christian Eichler | Okay, merci... ensuite peux je à cette Stelle oui juste Fragen, quoi es avec cette DCs sur sich hat:
quoi hat es avec cette DCs sur sich ? qu'est-ce que c'est et pourquoi nécessaire on quelque chose comme ? |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 21.07.2007 ▲ |
| |
| | Andreas Miethe
| allô Christian,
un DC ou bien Devicecontext ist grob dit une Struktur qui grafische Objekte et en Attribute beinhaltet. Grafische Objekte sommes Bitmap,Brush,Font,Pen et région. chaque la fenêtre et Contrôle mais aussi un Drucker hat un DC sur cela avec API-Funktionen gezeichnet volonté peux.
CreateCompatibleDC() legt un DC im grenier à, diesem DC peux ensuite avec SelectObject() eines qui o.g. grafischen Objekte zugewiesen volonté.
je hoffe j'ai cela ausreichend erklärt. |
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.07.2007 ▲ |
| |
| | Christian Eichler | Öhm... oui cela sollte langen, merci ! |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 21.07.2007 ▲ |
| |
| | Christian Eichler | @ Andreas : Dein Code était irgendwie très unübersichtlich, je hab den la fois so umgeschrieben, comment je ihn brauchen peux :
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @SelectObject(2) !gdi32.dll,SelectObject
Def @DeleteDC(1) !gdi32.dll,DeleteDC
Def @BitBlt(9) !gdi32.dll,BitBlt
Def @LineTo(3) !gdi32.dll,LineTo
Def @CreatePen(3) !gdi32.dll,CreatePen
Def @FloodFill(4) !gdi32.dll,FloodFill
Def @DeleteObject(1) !gdi32.dll,DeleteObject
Def @MoveToEx(4) !gdi32.dll,MoveToEx
Def @GetPixelA(3) !gdi32.dll,GetPixel
Proc Strich
Paramètres DCHandle&, StrichX1&, StrichY1&, StrichX2&, StrichY2&, StrichFarbe&
Déclarer Stift&
Laisser Stift&=@CreatePen(0,1,StrichFarbe&)
@SelectObject(DCHandle&,Stift&)
@MoveToEx(DCHandle&,StrichX1&,StrichY1&,0)
@LineTo(DCHandle&,StrichX2&,StrichY2&)
@DeleteObject(Stift&)
ENDPROC
Proc SpeicherBitmap
Paramètres XBreite&, YBreite&
Déclarer DC&, hBitMap&
Laisser DC&=@CreateCompatibleDC(%hdc)
Laisser hBitMap&=@CreateCompatibleBitmap(%hdc,XBreite&,YBreite&)
@SelectObject(DC&,hBitMap&)
@FloodFill(DC&,0,0,RGB(255,255,255))
return DC&
ENDPROC
Proc LadeSpeicherBitmapX
Paramètres DCHandle&
@BitBlt(%hdc,0,0,640,480,DCHandle&,0,0,$CC0020)
@BitBlt(%hdc2,0,0,640,480,DCHandle&,0,0,$CC0020)
ENDPROC
Proc LadeSpeicherBitmap
Paramètres DCHandle&, XBreite&, YBreite&
Déclarer m%, n%
Tandis que m% < XBreite&
Inc m%
Tandis que n% < YBreite&
Inc n%
Si non @GetPixelA(DCHandle&,m%,n%)=@RGB(255,255,255)
@BitBlt(%hdc,m%,n%,1,1,DCHandle&,m%,n%,$CC0020)
@BitBlt(%hdc2,m%,n%,1,1,DCHandle&,m%,n%,$CC0020)
EndIf
Endwhile
Laisser n%=0
Endwhile
ENDPROC
Proc ZerstohreSpeicherBitmap
Paramètres DCHandle&
@DeleteDC(DCHandle&)
ENDPROC
SetTrueColor 1
CLS @RGB(150,150,150)
Déclarer SBit1&
SpeicherBitmap 640,480
Laisser SBit1&=@&(0)
Strich SBit1&,0,0,100,50,@RGB(0,0,255)
Strich SBit1&,100,50,200,100,@RGB(0,255,0)
Strich SBit1&,200,100,300,150,@RGB(255,0,0)
Strich SBit1&,300,150,400,200,@RGB(0,0,255)
Strich SBit1&,400,200,500,250,@RGB(0,255,0)
Strich SBit1&,500,250,600,300,@RGB(255,0,0)
LadeSpeicherBitmap SBit1&,640,480
WaitInput
ZerstohreSpeicherBitmap SBit1&
seulement comment je une einzelne la couleur durchsichtig bekomme, là suis je mir encore pas 100%-ig sûrement. Im Beispiel dessus ist zwar une Solution, mais qui mais est très lente ! et pour den letzten paramètre dans BitBlt hab je aussi rien passendes trouvé !
mfg Christian
PS: je hab sogar selber encore une API-Funktion avec reingemurkst !!! |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 21.07.2007 ▲ |
| |
| | Andreas Miethe
| allô Christian
j'ai Dein Beispiel la fois angepasst. c'est maintenant une neue Procedur drin nommé Drawtransparent
Sieht wild aus, ist mais hoffentlich ausreichend kommentiert.
Im Grunde pouvoir qui Procedur Dein Speicherbitmap simple seulement durchsichtig et zeichnet es sur %HDC.
cela allez allerdings wesentlich plus rapide comme Votre Procedur, là alles sur einmal angezeigt wird.
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @SelectObject(2) !gdi32.dll,SelectObject
Def @DeleteDC(1) !gdi32.dll,DeleteDC
Def @BitBlt(9) !gdi32.dll,BitBlt
Def @LineTo(3) !gdi32.dll,LineTo
Def @CreatePen(3) !gdi32.dll,CreatePen
Def @FloodFill(4) !gdi32.dll,FloodFill
Def @DeleteObject(1) !gdi32.dll,DeleteObject
Def @MoveToEx(4) !gdi32.dll,MoveToEx
Def @GetPixelA(3) !gdi32.dll,GetPixel
Def GetCurrentObject(2) ! gdi32,GetCurrentObject
Def SetBkColor(2) ! gdi32,SetBkColor
Def CreateBitmap(5) ! gdi32,CreateBitmap
DEF SetMapMode(2) ! GDI32,SetMapMode
DEF GetMapMode(1) ! GDI32,GetMapMode
Proc Strich
Paramètres DCHandle&, StrichX1&, StrichY1&, StrichX2&, StrichY2&, StrichFarbe&
Déclarer Stift&
Laisser Stift&=@CreatePen(0,1,StrichFarbe&)
@SelectObject(DCHandle&,Stift&)
@MoveToEx(DCHandle&,StrichX1&,StrichY1&,0)
@LineTo(DCHandle&,StrichX2&,StrichY2&)
@DeleteObject(Stift&)
ENDPROC
Proc SpeicherBitmap
Paramètres XBreite&, YBreite&
Déclarer DC&, hBitMap&
Laisser DC&=@CreateCompatibleDC(%hdc)
Laisser hBitMap&=@CreateCompatibleBitmap(%hdc,XBreite&,YBreite&)
@SelectObject(DC&,hBitMap&)
@FloodFill(DC&,0,0,RGB(255,255,255))
return DC&
ENDPROC
Proc LadeSpeicherBitmapX
Paramètres DCHandle&
@BitBlt(%hdc,0,0,640,480,DCHandle&,0,0,$CC0020)
@BitBlt(%hdc2,0,0,640,480,DCHandle&,0,0,$CC0020)
ENDPROC
Proc LadeSpeicherBitmap
Paramètres DCHandle&, XBreite&, YBreite&
Déclarer m%, n%
Tandis que m% < XBreite&
Inc m%
Tandis que n% < YBreite&
Inc n%
Si non @GetPixelA(DCHandle&,m%,n%)=@RGB(255,255,255)
@BitBlt(%hdc,m%,n%,1,1,DCHandle&,m%,n%,$CC0020)
@BitBlt(%hdc2,m%,n%,1,1,DCHandle&,m%,n%,$CC0020)
EndIf
Endwhile
Laisser n%=0
Endwhile
ENDPROC
Proc ZerstohreSpeicherBitmap
Paramètres DCHandle&
@DeleteDC(DCHandle&)
ENDPROC
NEW !
Proc DrawTransparent
Paramètres inDC&,w&,h&,transcolor&
Déclarer hhBitmap&,BitmapHandle&
Déclarer HdcTemp&,HdcBack&,HdcObject&,HdcMem&,hdcSave&
Déclarer BmpAndBack&,BmpAndObject&,BmpAndMem&,BmpSave&
Déclarer BmpBackOld&,BmpObjectOld&,BmpMemOld&,BmpSaveOld&
Déclarer CColor&
temporaerDC anlegen
Laisser HdcTemp& = CreateCompatibleDC(%hdc)
Laisser hhBitMap&=@CreateCompatibleBitmap(%hdc,w&,h&)
SelectObject(HdcTemp&,hhBitMap&)
BitBlt(HdcTemp&,0,0,w&,h&,inDC&,0,0,$0CC0020)
un paire grenier-DCs anlegen
Laisser HdcBack& = CreateCompatibleDC(%hdc)
Laisser HdcObject& = CreateCompatibleDC(%hdc)
Laisser HdcMem& = CreateCompatibleDC(%hdc)
Laisser HdcSave& = CreateCompatibleDC(%hdc)
Bitmaps anlegen
monochrom DC
Laisser BmPAndBack& = CreateBitmap(w&,h&,1,1,0)
Laisser BmPAndObject& = CreateBitmap(w&,h&,1,1,0)
la couleur
Laisser BmPAndMem& = CreateCompatibleBitmap(%hdc,w&,h&)
Laisser BmPSave& = CreateCompatibleBitmap(%hdc,w&,h&)
SetMapMode(HdcTemp&,GetMapMode(%hdc))
chaque grenier-DC muss un Bitmap selektieren zum Sauver qui données
Laisser BmpBackOld& = SelectObject(HdcBack&,BmPAndBack&)
Laisser BmpObjectOld& = SelectObject(HdcObject&,BmpAndObject&)
Laisser BmpMemOld& = SelectObject(HdcMem&,BmpAndMem&)
Laisser BmpSaveOld& = SelectObject(HdcSave&,BmpSave&)
Bitmaps sichern weil es ueberschrieben wird
BitBlt (HdcSave&,0,0,w&,h&,HdcTemp&,0,0,$0CC0020)
Transparenz-la couleur pour temporaerDC mettons
Laisser CColor& = SetBkColor(HdcTemp&,TransColor&)
une Object-masque anlegen pour cela Bitmaps anlegen
de QuellBitmap dans Monochrom-Bitmap
BitBlt(HdcObject&,0,0,w&,h&,HdcTemp&,0,0,$0CC0020)
Hintergrundfarbe pour temoraerDC ist weiss
SetBkColor(HdcTemp&,rgb(255,255,255))
Object-masque invertieren
BitBlt(HdcBack&,0,0,w&,h&,HdcObject&,0,0,$0330008)
HDC-Hintergrund ins MemoryDC kopieren
BitBlt(HdcMem&,0,0,w&,h&,%hdc,0,0,$0CC0020)
Bereich maskieren dans dem cela Bitmaps erscheint
BitBlt(HdcMem&,0,0,w&,h&,HdcObject&,0,0,$08800C6)
transparenten Bereich maskieren
BitBlt(HdcTemp&,0,0,w&,h&,HdcBack&,0,0,$08800C6)
XOR Bitmap avec Hintergrund HDC
BitBlt(HdcMem&,0,0,w&,h&,HdcTemp&,0,0,$0EE0086)
transparentes Bitmap dans HDC kopieren
BitBlt(%hdc,0,0,w&,h&,HdcMem&,0,0,$0CC0020)
et ins grenier-HDC kopieren
BitBlt(%hdc2,0,0,w&,h&,HdcMem&,0,0,$0CC0020)
grenier-Bitmaps freigeben
DeleteObject(SelectObject(HdcBack&,BmpBackOld&))
DeleteObject(SelectObject(HdcObject&,BmpObjectOld&))
DeleteObject(SelectObject(HdcMem&,BmpMemOld&))
DeleteObject(SelectObject(HdcSave&,BmpSaveOld&))
DeleteObject(SelectObject(HdcTemp&,hhBitmap&))
grenier-Dcs freigeben
DeleteDC(HdcMem&)
DeleteDC(HdcBack&)
DeleteDC(HdcObject&)
DeleteDC(HdcSave&)
DeleteDC(HdcTemp&)
ENDPROC
SetTrueColor 1
CLS @RGB(150,150,150)
Déclarer SBit1&,haDC&
LoadBmp $syspath+\setup.bmp,0,0;0 Hintergrundbild zum Testn ( Pfad anpassen !! )
SpeicherBitmap 640,480
Laisser SBit1&=@&(0)
Strich SBit1&,0,0,100,50,@RGB(0,0,255)
Strich SBit1&,100,50,200,100,@RGB(0,255,0)
Strich SBit1&,200,100,300,150,@RGB(255,0,0)
Strich SBit1&,300,150,400,200,@RGB(0,0,255)
Strich SBit1&,400,200,500,250,@RGB(0,255,0)
Strich SBit1&,500,250,600,300,@RGB(255,0,0)
DrawTransparent SBit1&,640,480,RGB(255,255,255)
WaitInput
ZerstohreSpeicherBitmap SBit1&
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 21.07.2007 ▲ |
| |
| | Christian Eichler | merci, je hatte cela Problem, dass mon Procédure droite lente était ... je hab mais arrêt rien besseres trouvé ...
merci pour qui Aider avec qui WinAPI !
mfg Christian |
| | | Debian Lenny, Intel Celeron 2,8 Ghz, 768 MB Ram && Win XP Pro, Intel C2D 1,66Ghz, 2 GB Ram ... PROFAN² 6.6 | 21.07.2007 ▲ |
| |
|
répondreOptions du sujet | 1.178 Views |
Themeninformationencet Thema hat 6 participant: |