Deutsch
Forum

Erledigt: Grafikbild mit GDI zeichnen

 
Möchte ein bild&, wo ich eine Linie reingezeichnet habe mit dem GDI-Befehl einlesen und wieder als neues Bild mit GDI daneben zeichnen. Das Musterbild stelle ich links mit startpaint hwin& dar.

Klappt nicht.

Wo liegt der Fehler?

mfg
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
declare hwin&,bild&,ende%,bmp_gdi&,GraphicObject&
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
bild&=create(hnewpic,128,128,$ffffff)
startpaint bild&
line 10,10-120,120
endpaint
startpaint hwin&
drawpic bild&,10,10,0
endpaint
~GdipCreateBitmapFromHBITMAP(bild&, 0, Bmp_gdi&)
~GdipCreateFromHDC(%hdc,ADDR(GraphicObject&))
~GdipDrawImageI(GraphicObject&,bmp_gdi&,200,10)
~GdipDeleteGraphics(GraphicObject&)
waitinput
 
06.05.2009  
 



Bei solchen Themen musst Du immer gaaanz laut



rufen - er beherrscht das meisterhaft.

(davon keine Ahnung hab...)
 
06.05.2009  
 



Woooooo ist andreas?

Hilf mir mal bitte weiter mit der Grafik in GDI.

mfg
 
06.05.2009  
 




Andreas
Miethe


Ok ok, bin ja schon da .
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
declare hwin&,bild&,ende%,bmp_gdi&,GraphicObject&
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
bild&=create(hnewpic,128,128,$ffffff)
startpaint bild&
line 10,10-120,120
endpaint
startpaint hwin&
drawpic bild&,10,10,0
endpaint
#########
Hier ist Fehler No. 1
var gdiplusToken& = InitGDIPlus()GDIPlus starten
vergessen ?
##########
~GdipCreateBitmapFromHBITMAP(bild&,0,addr(Bmp_gdi&))
#########
Hier ist Fehler No. 2
~GdipCreateFromHwnd(hwin&,ADDR(GraphicObject&))
###########
~GdipDrawImageI(GraphicObject&,bmp_gdi&,200,10)
~GdipDeleteGraphics(GraphicObject&)
waitinput
 
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 :  [...] 
07.05.2009  
 



Jup, danke.
Klappt wunderbar mit dem Bild.

mfg
 
07.05.2009  
 



Hallo Andreas, ich brauche noch einmal deine Hilfe.
Ich habe ein Bild hpic& gezeichnet.
Dieses transportiere ich mit dem Gdi in die hbitmap& und zeige es an.

Nun möchte ich das hpic& vorher rotieren lassen um den Mittelpunkt und dann erst in die hbitmap& bringen.

Wie geht das?

mfg
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
InitGDIPlus()
hbitmap&=create(hnewpic,255,255,$ffffff)
hpic&=create(hnewpic,128,128,$ffffff)
startpaint hpic&
line 10,10-120,120
endpaint
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
~GdipCreateHBITMAPFromBitmap(lngImage&,@Addr(hBitmap&))
startpaint hwin&
DrawPic hBitmap&,50,50;0
endpaint
WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDisposeImage(lngImage&)
End
 
08.05.2009  
 




Andreas
Miethe


2peter Bierbach, Beitrag=52209, Zeitpunkt=08.05.2009
Hallo Andreas, ich brauche noch einmal deine Hilfe.
Ich habe ein Bild hpic& gezeichnet.
Dieses transportiere ich mit dem Gdi in die hbitmap& und zeige es an.

Nun möchte ich das hpic& vorher rotieren lassen um den Mittelpunkt und dann erst in die hbitmap& bringen.

Wie geht das?


Da musste ich mich auch erstmal schlau machen.
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
Var gdiplusToken& = InitGDIPlus()GDIPlus starten
hpic&=create(hnewpic,128,128,$ffffff)
Var ImWidth& = %BmpX  Breite und
Var ImHeight& = %BmpY Höhe sichern, brauchen wir zum Berechnen
startpaint hpic&
Rectangle 0,0-4,4
line 10,10-120,120
endpaint
Diagonale berechnen, hier kann ich endlich mal was mit dem
Satz des Pythagoras anfangen !
Var Dig& = Sqrt(Sqr(ImWidth&) + Sqr(ImHeight&)) Diagonale ( a²+b² = c² ) die Wurzel von c² ist die Diagonale
hbitmap&=create(hnewpic,Dig&,Dig&,0)
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
StartPaint hBitmap&
Var Imagedc& = 0
~GdipCreateFromhDC(%hdc,ADDR(ImageDC&))
~GdipRotateWorldTransform(ImageDc&,Single(225.0),1)=45 Grad nach rechts
~GdipTranslateWorldTransform(ImageDc&,Single(Dig&/2),Single(Dig&/2),1)
~GdipDrawImageRectI(ImageDc&,lngImage&,ImWidth&/2,ImHeight&/2,-ImWidth&,-ImHeight&)
EndPaint
startpaint hwin&
DrawPic hBitmap&,0,0;0
DrawPic hPic&,180,180;0
endpaint
WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDeleteGraphics(ImageDc&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&) GDIPlus beenden
End
 
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 :  [...] 
09.05.2009  
 



Jup, danke. Dreht sich wunderbar in der Bitmap.
Danke.

mfg
 
09.05.2009  
 



So, dreht sich wunderbar.
Nur ist das gesamte Viereck nicht Transparent obwohl ich -1 dort stehen habe.
Die Farbe $ff00ff habe ich als Hintergrund vergeben.

Irgendwo mus der Fehler sein von mir?

Wer weiss weiter?

mfg
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
Var gdiplusToken& = InitGDIPlus()
hpic&=create(hnewpic,128,128,$ff00ff)
Var ImWidth& = %BmpX
Var ImHeight& = %BmpY
startpaint hpic&
line 10,10-120,120
endpaint
Var Dig& = Sqrt(Sqr(ImWidth&) + Sqr(ImHeight&))
hbitmap&=create(hnewpic,Dig&,Dig&,$ff00ff)
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
Var Imagedc& = 0

WhileLoop 0,180,2

    StartPaint hBitmap&
    ~GdipCreateFromhDC(%hdc,ADDR(ImageDC&))
    ~GdipRotateWorldTransform(ImageDc&,single(&loop),1)
    ~GdipTranslateWorldTransform(ImageDc&,Single(Dig&/2),Single(Dig&/2),1)
    ~GdipDrawImageRectI(ImageDc&,lngImage&,ImWidth&/2,ImHeight&/2,-ImWidth&,-ImHeight&)
    EndPaint
    startpaint hwin&
    DrawPic hBitmap&,100,100;-1,$ff00ff
    endpaint

endwhile

WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDeleteGraphics(ImageDc&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
End
 
09.05.2009  
 




Andreas
Miethe


Das kann so nicht funktionieren, da hPic& nicht transparent gezeichnet wird, nur hBitmap&

Da musst Du schon die Farbe des Fensters benutzen.
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
Var gdiplusToken& = InitGDIPlus()
hpic&=create(hnewpic,128,128,~GetSysColor(~COLOR_BTNFACE))
Var ImWidth& = %BmpX
Var ImHeight& = %BmpY
startpaint hpic&
line 10,10-120,120
endpaint
Var Dig& = Sqrt(Sqr(ImWidth&) + Sqr(ImHeight&))
hbitmap&=create(hnewpic,Dig&,Dig&,~GetSysColor(~COLOR_BTNFACE))
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
Var Imagedc& = 0

WhileLoop 0,180,2

    StartPaint hBitmap&
    ~GdipCreateFromhDC(%hdc,ADDR(ImageDC&))
    ~GdipRotateWorldTransform(ImageDc&,single(&loop),1)
    ~GdipTranslateWorldTransform(ImageDc&,Single(Dig&/2),Single(Dig&/2),1)
    ~GdipDrawImageRectI(ImageDc&,lngImage&,ImWidth&/2,ImHeight&/2,-ImWidth&,-ImHeight&)
    EndPaint
    startpaint hwin&
    DrawPic hBitmap&,100,100;-1,~GetSysColor(~COLOR_BTNFACE)
    endpaint

endwhile

WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDeleteGraphics(ImageDc&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
End
 
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 :  [...] 
09.05.2009  
 



Danke für deine Mühe.

Habe jetzt dieses noch zwischengefügt :
hbitmap1&

Jetzt ist das GDI-Viereck Transparent. Habe weiss als Transparent genommen.
Es hat aber einige weisse Zacken(die Linie), die nicht weggehen. Wie kann man dieses im vorigen hbitmap1& verfeinern mit GDI-Befehlen?

Als Muster habe ich ein Rechteck da hintergelegt.
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&,pixel&,hBitmap1&,hpic1&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 250, 20, 650,500)
Var gdiplusToken& = InitGDIPlus()
hpic1&=create(hnewpic,128,128,$0000ff)
hpic&=create(hnewpic,128,128,$ffffff)
Var ImWidth& = %BmpX
Var ImHeight& = %BmpY
startpaint hpic&
UsePen 1,2,RGB(0,0,255)
line 10,10-120,120
endpaint
Var Dig& = Sqrt(Sqr(ImWidth&) + Sqr(ImHeight&))
hbitmap&=create(hnewpic,Dig&,Dig&,$ffffff)
hbitmap1&=create(hnewpic,Dig&,Dig&,$ffffff)
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
Var Imagedc& = 0
startpaint hwin&
DrawPic hpic1&,80,80;0
endpaint

WhileLoop 0,180,10

    StartPaint hbitmap&
    ~GdipCreateFromhDC(%hdc,ADDR(ImageDC&))
    ~GdipRotateWorldTransform(ImageDc&,single(&loop),1)
    ~GdipTranslateWorldTransform(ImageDc&,Single(Dig&/2),Single(Dig&/2),1)
    ~GdipDrawImageRectI(ImageDc&,lngImage&,ImWidth&/2,ImHeight&/2,-ImWidth&,-ImHeight&)
    EndPaint
    StartPaint hbitmap1&
    DrawPic hBitmap&,0,0;-1
    endpaint
    startpaint hwin&
    DrawPic hBitmap1&,100,100;-1
    endpaint
    sleep 100

endwhile

WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDeleteGraphics(ImageDc&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
End

mfg
 
09.05.2009  
 




Andreas
Miethe


Probier das mal !
KompilierenMarkierenSeparieren
 $H windows.ph
 $H includes\Functions_GDIPLUS.ph
 $H includes\GDIP_Imageging.ph
 $I includes\GDIP_Helper.inc
Declare hPic&,hwin&,lngImage&,hBitmap&
Window 20,20-200,200
hWin& = Create(Window, %hWnd, Test, 450, 20, 650,500)
Var gdiplusToken& = InitGDIPlus()
hpic&=create(hnewpic,128,128,$ffffff)
Var ImWidth& = %BmpX
Var ImHeight& = %BmpY
startpaint hpic&
line 10,10-120,120
endpaint
Var Dig& = Sqrt(Sqr(ImWidth&) + Sqr(ImHeight&))
hbitmap&=create(hnewpic,Dig&,Dig&,$ffffff)
~GdipCreateBitmapFromHBITMAP(hPic&,0,@Addr(lngImage&))
Var Imagedc& = 0
temporäres DC und Bitmap erzeugen
##################################
Var TempDC& =  ~CreateCompatibleDC(%hdc)
Var TempBmp& = ~CreateCompatibleBitmap(%hdc,Dig&,Dig&)
~SelectObject(TempDC&,TempBmp&)
~SetStretchBltMode(TempDC&,~COLORONCOLOR)
##################################
Speicherbitmap zur sicherung des Hintergrundes
##################################
mcls Dig&,Dig&
StartPaint -1
~BitBlt(%hdc,0,0,Dig&,dig&,~GetDC(hWin&),100,100,~srccopy)
EndPaint
##################################

WhileLoop 0,180,2

    TempDC& =  ~CreateCompatibleDC(%hdc)
    TempBmp& = ~CreateCompatibleBitmap(%hdc,Dig&,Dig&)
    ~SelectObject(TempDC&,TempBmp&)
    StartPaint hBitmap&
    ~GdipCreateFromhDC(%hdc,ADDR(ImageDC&))
    ~GdipRotateWorldTransform(ImageDc&,single(&loop),1)
    ~GdipTranslateWorldTransform(ImageDc&,Single(Dig&/2),Single(Dig&/2),1)
    ~GdipDrawImageRectI(ImageDc&,lngImage&,ImWidth&/2,ImHeight&/2,-ImWidth&,-ImHeight&)
    EndPaint
    hBitmap transparent in TempBitmap kopieren
    ##################################
    StartPaint hBitmap&
    ~TransparentBlt(TempDC&,0,0,Dig&,Dig&,%hdc,0,0,Dig&,Dig&,$ffffff)
    ~DeleteDC(TempDC&)
    endpaint
    ##################################
    temporäres Bitmap anzeigen
    ##################################
    startpaint hWin&
    mCopyBmp 0,0-Dig&,Dig&>100,100;0
    DrawPic TempBmp&,100,100;-1
    endpaint
    ##################################
    ~DeleteObject(TempBmp&)

endwhile

WaitInput
DeleteObject hPic&
DeleteObject hBitmap&
~GdipDeleteGraphics(ImageDc&)
~GdipDisposeImage(lngImage&)
ExitGDIPlus(gdiplusToken&)
End
 
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 :  [...] 
09.05.2009  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.905 Betrachtungen

Unbenanntvor 0 min.
ByteAttack02.10.2015
iF11.05.2015
Tommy16.03.2015
Ernst26.05.2014
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

unbekannt (9x)
Andreas Miethe (6x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie