Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Image in GUI ändern - Alternative zu GuiControl?


  • Please log in to reply
18 replies to this topic
nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Hmm...

Ich hab immer noch keine Ahnung wieso es ein Flackern geben könnte.

 

BTW @justme

Muss ich den Bit Block Transfer benutzen damit es weniger flackern gibt ?


Visit the new forum ahkscript.org.

http://ahkscript.org


just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

BTW @justme

Muss ich den Bit Block Transfer benutzen damit es weniger flackern gibt ?

 

Das wüsste ich auch gern. Es scheint so zu sein, dass BitBlt() irgendwie synchronisiert abläuft und deshalb weniger sichtbare Störungen erzeugt.


Prefer ahkscript.org for the time being.


nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Ich meine ja, dass wenn man auf den DeviceContext malt es synchronisiert abläuft.

Dazu passt aber nicht das er ein Flackern bei meiner Funktion hat.

Vor allem, da ich dieses Flackern nicht habe.

Was ist bei dir:

#SingleInstance,force
pToken:=Gdip_Startup()
pic1 := Gdip_CreateBitmap(800, 600)
G := Gdip_GraphicsFromImage(pic1)
pic2 := Gdip_CreateBitmap(800, 400)
G2 := Gdip_GraphicsFromImage(pic2)
pic3 := Gdip_CreateBitmap(600, 600)
G3 := Gdip_GraphicsFromImage(pic3)
Gdip_GraphicsClear(G,0xff0000FF)
Gdip_GraphicsClear(G2,0xffffff00)
Gdip_GraphicsClear(G3,0xff00ff00)
Gdip_SaveBitmapToFile(pic1, "pic1.jpg", 100)
Gdip_SaveBitmapToFile(pic2, "pic2.jpg", 100)
Gdip_SaveBitmapToFile(pic3, "pic3.jpg", 100)
Gdip_DisposeImage(pic1) ;aufräumen
Gdip_DeleteGraphics(G)
Gdip_DisposeImage(pic2) ;aufräumen
Gdip_DeleteGraphics(G2)
Gdip_DisposeImage(pic3) ;aufräumen
Gdip_DeleteGraphics(G3)
Gui,Add,Picture,w800 h600 hwndh,Pic1.jpg
gui,show
Loop
{
sleep,2000
SetImageSmoothScale("Pic2.jpg",h+0)
sleep,2000
SetImageSmoothScale("Pic3.jpg",h+0)
sleep,2000
SetImageSmoothScale("Pic1.jpg",h+0)
}


CalcScale(dw,dh,sw,sh)
{
If ((sh/dh)>(sw/dw))
{    
newh:=dh,neww:=floor(sw/sh*newh)
newy:=0,newx:=ceil((dw-neww)/2)
}
Else
{    
neww:=dw
newh:=floor(sh/sw*neww)
newx:=0
newy:=ceil((dh-newh)/2)
}
return a:={x:newx,y:newy,w:neww,h:newh}
}

SetImageSmoothScale(Pic,hwnd)
{
static ptoken=Gdip_Startup()
PICDC:=GetDC(hwnd) ;DeviceContext ermitteln
G:=Gdip_GraphicsFromHDC(PICDC) ;Um dann eine GDIGraphic erstellen
pBitmap:=Gdip_CreateBitmapFromFile(pic) ;lädt eine Bilddatei
pBitmap2 := Gdip_CreateBitmap(800, 600)
G2 := Gdip_GraphicsFromImage(pBitmap2)
Gdip_GraphicsClear(G2,0xff000000) ;muss da sonst Überreste des Vorherigen Bildes bestehen bleiben
scale:=CalcScale(800,600,Gdip_GetImageWidth(pBitmap),Gdip_GetImageHeight(pBitmap))
Gdip_DrawImage(G2, pBitmap, scale.x, scale.y, scale.w, scale.h, 0, 0,Gdip_GetImageWidth(pBitmap), Gdip_GetImageHeight(pBitmap) ) 
Gdip_DrawImage(G, pBitmap2, 0, 0, 800, 600, 0, 0, 800, 600)
Gdip_DisposeImage(pBitmap) ;aufräumen
Gdip_DeleteGraphics(G)
Gdip_DisposeImage(pBitmap2) ;aufräumen
Gdip_DeleteGraphics(G2)
}

Visit the new forum ahkscript.org.

http://ahkscript.org


just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Uff, ich bin drin! Wer fummelt denn da wieder am Server rum?

 

 

Hallo nnnik,

 

sagen wir mal: Unentschieden! Auf meinem betagten Officesystem mit Onboardgrafik sind keine objektiven Unterschiede zu erkennen. BitBlt() scheint die Daten aber etwas schneller in das Control zu übertragen als Gdip_DrawImage(). Wenn skaliert werden muss, scheint Gdip_DrawImage() aber mit wachsender Größe zunehmend schneller zu sein als StretchBlt().


Prefer ahkscript.org for the time being.