Foro | | | | - Página 1 - |
| Christian Eichler | Como siempre tener Yo una Problema : ¿Cómo se puede Yo mehrere (!) Memory-Bitmaps en Profano² 6.6 redactar ? Mit MCLS kann veces sí eins redactar, pero no mehrere ... Aunque möchte Yo el Bilder entonces no en el Festplatte zwischenspeichern (sólo dass keiner en el Concepto kommt, me a sagen Yo se me SaveBmp y LoadBmp trabajo )
Mi 1. Concepto : WinAPI : Befehl (meiner Meinung después de el richtige) gefunden, Eingebaut, Fehler.
Der Quellcode :
Als Fehlermeldung kommt como entonces, el el Bild test.bmp no gespeichert voluntad podría . Como bekomm Yo dass para laufen, dass Yo en Profano (ggf. en WinAPI) mehrere Memory-Bitmaps erstelle y darauf auch zugreifen kann ?
mfg euer siempre 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 ▲ |
| |
| | | | | - Página 1 - |
| Christian Eichler | 640*480 war no posible, aber Screenshot es trotzdem esta
El feine Linie, el du warscheinlich sin Brille garnet siehst se el Graph darstellen
|
| | | 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 el Wertebereich unterhalb uno Longs oder Floats? |
| | | | |
| | | | - Página 2 - |
| | Nico Madysa | En 6000*3000 Pixeln sicherlich |
| | | | |
| | | Liegt el Wertebereich unterhalb uno Longs oder Floats? |
| | | | |
| | Christian Eichler | Der Wertebereich de qué ?
Auf el Bild natürlich en el Largo ... En Definitions y Wertemenge des Graphen en Float ... Wobei Yo sagen muss, dass Yo el Floatwerte sólo umrechne y luego direkt aufs Papier zeichne, also no speichere ! Yo speicher eigentlich gar no Werte, wären sowieso a viele !
Hilft dir el más ? |
| | | 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
| ¡Hola Chistian,
a Deinem Code : StartPaint leitet el Edición en una más Ventana oder Control en, no en una DC, kann also no trabajo.
Si usted con API trabajo willst entonces musst Usted el auch con API-Zeichenfunktionen hacer, con el Profano-Zeichenfunktionen kannst Usted entonces nichts anfangen.
Hier una Ejemplo, que un Speicherbitmap anlegt, una Linie y una Kurve darauf características, y el Ganze entonces en el Profanfenster anzeigt. Auf esta Art kannst Usted entonces auch mehrere Speicherbitmaps invertir y Mostrar.
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @Seleccionar objeto(2) !gdi32.dll,Seleccionar objeto
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
Declarar dc&,test&,pen&,Points#
Let dc& = @CreateCompatibleDC(%hdc) DeviceContext erzeugen
Let test& = @CreateCompatibleBitmap(%HDC,640,480)hBitmap erzeugen
Let pen& = @CreatePen(0,1,RGB(0,0,255))Pen para dibujar erzeugen
@Seleccionar objeto(dc&,test&)hBitmap en DeviceContext
@Seleccionar objeto(dc&,pen&)Pen en DeviceContext
@FloodFill(dc&,0,0,RGB(255,255,255))hBitmap blanco füllen
@MoveToEx(dc&,0,0,0) para Startpunkt
@LineTo(dc&,Width(%hwnd),Height(%hwnd))Linie zeichen
Struktur con Punkten invertir ( en diesem Fall 3 Punkte )
Dim Points#,24
1. Punkt
Largo Points#,0 = 0 X
Largo Points#,4 = 0 Y
2. Punkt
Largo Points#,8 = Width(%hwnd)/2
Largo Points#,12 = Height(%hwnd)*2
2. Punkt
Largo Points#,16 = Width(%hwnd)
Largo Points#,20 = 0
@MoveToEx(dc&,0,0,0)para Startpunkt
@PolyBezierTo(dc&,Points#,3)Bezier-Kurve de Punkt-Struktur
@BitBlt(%hdc,0,0,640,480,dc&,0,0,$CC0020)hBitmap en CLS-Ventana Mostrar
@BitBlt(%hdc2,0,0,640,480,dc&,0,0,$CC0020)Hbitmap auch para Sicherungs-DC
Speicher aufräumen
Disponer Points#
@DeleteObject(test&)
@DeleteObject(pen&)
@DeleteDC(dc&)
Mientras 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, danke... Dann kann Yo a dieser Punto sí igual Fragen, qué lo con esta DCs en se ha:
Was ha lo con esta DCs en se ? Was es el y por qué benötigt uno algo como ? |
| | | 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
| ¡Hola Christian,
Ein DC oder Devicecontext es grob dijo una Struktur el grafische Objetos y deren Atributos beinhaltet. Grafische Objetos son Mapa de bits,Brush,Font,Pen y Region. Jedes Ventana y Control aber auch una Drucker ha una DC el con API-Características suscrito voluntad kann.
CreateCompatibleDC() legt una DC en el Speicher a, diesem DC kann entonces con Seleccionar objeto() uno el o.g. grafischen Objetos zugewiesen voluntad.
Yo hoffe Tengo el 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... sí el debería langen, danke ! |
| | | 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 : Su Code war irgendwie muy unübersichtlich, Yo tener el veces así umgeschrieben, Yo ihn brauchen kann :
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @Seleccionar objeto(2) !gdi32.dll,Seleccionar objeto
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
Parámetros DCHandle&, StrichX1&, StrichY1&, StrichX2&, StrichY2&, StrichFarbe&
Declarar Stift&
Let Stift&=@CreatePen(0,1,StrichFarbe&)
@Seleccionar objeto(DCHandle&,Stift&)
@MoveToEx(DCHandle&,StrichX1&,StrichY1&,0)
@LineTo(DCHandle&,StrichX2&,StrichY2&)
@DeleteObject(Stift&)
ENDPROC
Proc SpeicherBitmap
Parámetros XBreite&, YBreite&
Declarar DC&, hBitMap&
Let DC&=@CreateCompatibleDC(%hdc)
Let hBitMap&=@CreateCompatibleBitmap(%hdc,XBreite&,YBreite&)
@Seleccionar objeto(DC&,hBitMap&)
@FloodFill(DC&,0,0,RGB(255,255,255))
volver DC&
ENDPROC
Proc LadeSpeicherBitmapX
Parámetros DCHandle&
@BitBlt(%hdc,0,0,640,480,DCHandle&,0,0,$CC0020)
@BitBlt(%hdc2,0,0,640,480,DCHandle&,0,0,$CC0020)
ENDPROC
Proc LadeSpeicherBitmap
Parámetros DCHandle&, XBreite&, YBreite&
Declarar m%, n%
Mientras que m% < XBreite&
Inc m%
Mientras que n% < YBreite&
Inc n%
Caso negativo @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
Let n%=0
EndWhile
ENDPROC
Proc ZerstohreSpeicherBitmap
Parámetros DCHandle&
@DeleteDC(DCHandle&)
ENDPROC
SetTrueColor 1
CLS @RGB(150,150,150)
Declarar SBit1&
SpeicherBitmap 640,480
Let 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&
Nur Yo una einzelne Farbe durchsichtig bekomme, como bin Yo todavía no 100%-ig sicher. Im Ejemplo oben Aunque una solución, aber el es doch muy langsam ! Und para el letzten Parámetro en BitBlt tener Yo auch nichts passendes gefunden !
mfg Christian
PS: Yo incluso selber ni API-Función con 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
| ¡Hola Christian
Yo Su Ejemplo veces adaptado. Es ahora una neue Procedur drin nombre Drawtransparent
Sieht wild de, es aber hoffentlich ausreichend kommentiert.
Im Grunde macht el Procedur Su Speicherbitmap simplemente sólo durchsichtig y características lo en %HDC.
Es allerdings wesentlich más rápido como Su Procedur, como alles en una vez adecuado se.
Def @CreateCompatibleBitmap(3) !gdi32.dll,CreateCompatibleBitmap
Def @CreateCompatibleDC(1) !gdi32.dll,CreateCompatibleDC
Def @Seleccionar objeto(2) !gdi32.dll,Seleccionar objeto
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
Parámetros DCHandle&, StrichX1&, StrichY1&, StrichX2&, StrichY2&, StrichFarbe&
Declarar Stift&
Let Stift&=@CreatePen(0,1,StrichFarbe&)
@Seleccionar objeto(DCHandle&,Stift&)
@MoveToEx(DCHandle&,StrichX1&,StrichY1&,0)
@LineTo(DCHandle&,StrichX2&,StrichY2&)
@DeleteObject(Stift&)
ENDPROC
Proc SpeicherBitmap
Parámetros XBreite&, YBreite&
Declarar DC&, hBitMap&
Let DC&=@CreateCompatibleDC(%hdc)
Let hBitMap&=@CreateCompatibleBitmap(%hdc,XBreite&,YBreite&)
@Seleccionar objeto(DC&,hBitMap&)
@FloodFill(DC&,0,0,RGB(255,255,255))
volver DC&
ENDPROC
Proc LadeSpeicherBitmapX
Parámetros DCHandle&
@BitBlt(%hdc,0,0,640,480,DCHandle&,0,0,$CC0020)
@BitBlt(%hdc2,0,0,640,480,DCHandle&,0,0,$CC0020)
ENDPROC
Proc LadeSpeicherBitmap
Parámetros DCHandle&, XBreite&, YBreite&
Declarar m%, n%
Mientras que m% < XBreite&
Inc m%
Mientras que n% < YBreite&
Inc n%
Caso negativo @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
Let n%=0
EndWhile
ENDPROC
Proc ZerstohreSpeicherBitmap
Parámetros DCHandle&
@DeleteDC(DCHandle&)
ENDPROC
NEU !
Proc DrawTransparent
Parámetros inDC&,w&,h&,transcolor&
Declarar hhBitmap&,BitmapHandle&
Declarar HdcTemp&,HdcBack&,HdcObject&,HdcMem&,hdcSave&
Declarar BmpAndBack&,BmpAndObject&,BmpAndMem&,BmpSave&
Declarar BmpBackOld&,BmpObjectOld&,BmpMemOld&,BmpSaveOld&
Declarar CColor&
temporaerDC invertir
Let HdcTemp& = CreateCompatibleDC(%hdc)
Let hhBitMap&=@CreateCompatibleBitmap(%hdc,w&,h&)
Seleccionar objeto(HdcTemp&,hhBitMap&)
BitBlt(HdcTemp&,0,0,w&,h&,inDC&,0,0,$0CC0020)
una pocos Speicher-DCs invertir
Let HdcBack& = CreateCompatibleDC(%hdc)
Let HdcObject& = CreateCompatibleDC(%hdc)
Let HdcMem& = CreateCompatibleDC(%hdc)
Let HdcSave& = CreateCompatibleDC(%hdc)
Bitmaps invertir
monochrom DC
Let BmPAndBack& = CreateBitmap(w&,h&,1,1,0)
Let BmPAndObject& = CreateBitmap(w&,h&,1,1,0)
farbe
Let BmPAndMem& = CreateCompatibleBitmap(%hdc,w&,h&)
Let BmPSave& = CreateCompatibleBitmap(%hdc,w&,h&)
SetMapMode(HdcTemp&,GetMapMode(%hdc))
cada Speicher-DC muss una Mapa de bits selektieren para Guardar el Daten
Let BmpBackOld& = Seleccionar objeto(HdcBack&,BmPAndBack&)
Let BmpObjectOld& = Seleccionar objeto(HdcObject&,BmpAndObject&)
Let BmpMemOld& = Seleccionar objeto(HdcMem&,BmpAndMem&)
Let BmpSaveOld& = Seleccionar objeto(HdcSave&,BmpSave&)
Bitmaps sichern porque lo ueberschrieben se
BitBlt (HdcSave&,0,0,w&,h&,HdcTemp&,0,0,$0CC0020)
Transparenz-Farbe fuer temporaerDC conjunto
Let CColor& = SetBkColor(HdcTemp&,TransColor&)
Un Object-Maske invertir fuer el Bitmaps invertir
Von QuellBitmap en Monochrom-Mapa de bits
BitBlt(HdcObject&,0,0,w&,h&,HdcTemp&,0,0,$0CC0020)
Color de fondo fuer temoraerDC es blanco
SetBkColor(HdcTemp&,rgb(255,255,255))
Object-Maske invertieren
BitBlt(HdcBack&,0,0,w&,h&,HdcObject&,0,0,$0330008)
HDC-Hintergrund en el MemoryDC kopieren
BitBlt(HdcMem&,0,0,w&,h&,%hdc,0,0,$0CC0020)
Zona maskieren en el el Bitmaps erscheint
BitBlt(HdcMem&,0,0,w&,h&,HdcObject&,0,0,$08800C6)
transparenten Zona maskieren
BitBlt(HdcTemp&,0,0,w&,h&,HdcBack&,0,0,$08800C6)
XOR Mapa de bits con Hintergrund HDC
BitBlt(HdcMem&,0,0,w&,h&,HdcTemp&,0,0,$0EE0086)
transparentes Mapa de bits en HDC kopieren
BitBlt(%hdc,0,0,w&,h&,HdcMem&,0,0,$0CC0020)
y en el Speicher-HDC kopieren
BitBlt(%hdc2,0,0,w&,h&,HdcMem&,0,0,$0CC0020)
Speicher-Bitmaps liberación
DeleteObject(Seleccionar objeto(HdcBack&,BmpBackOld&))
DeleteObject(Seleccionar objeto(HdcObject&,BmpObjectOld&))
DeleteObject(Seleccionar objeto(HdcMem&,BmpMemOld&))
DeleteObject(Seleccionar objeto(HdcSave&,BmpSaveOld&))
DeleteObject(Seleccionar objeto(HdcTemp&,hhBitmap&))
Speicher-Dcs liberación
DeleteDC(HdcMem&)
DeleteDC(HdcBack&)
DeleteDC(HdcObject&)
DeleteDC(HdcSave&)
DeleteDC(HdcTemp&)
ENDPROC
SetTrueColor 1
CLS @RGB(150,150,150)
Declarar SBit1&,haDC&
LoadBmp $syspath+\setup.bmp,0,0;0 Hintergrundbild para Testn ( Pfad adaptar !! )
SpeicherBitmap 640,480
Let 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 | Gracias, Yo hatte el problema, dass mi Procedimiento bastante langsam war ... Yo aber sólo nichts besseres gefunden ...
Gracias para el Ayuda con el 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 ▲ |
| |
|
RespuestaThemeninformationenDieses Thema ha 6 subscriber: |