Jump to content

GDIPlus DrawImageRect Problem


Recommended Posts

Hello,

I have problem with _GDIPlus_GraphicsDrawImageRect, here is picture: 

 Untitled.bmp

I set _GDIPlus_GraphicsSetInterpolationMode to 5.

I can see it moves to top half pixel, and it moves to left half pixel too.

I need to fix space between images, anybody can help me fix it?
 

Thanks!

Edited by algiuxas

After switching years ago to Linux, sadly I don't use AutoIt anymore.

Link to comment
Share on other sites

Post your code that we can see what you did.

$IMAGE = "test.bmp";DIRECTORY OF VERY SMALL IMAGE(I recommend use 3x3 size image)
$ExitTimer = 12;Exit in 12 secounds

#include <GDIPlus.au3>
#include <Math.au3>
#include <Misc.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
Global $GraphicsSizeX, $GraphicsSizeY, $Font, $GUI, $TestIMAGE, _
    $Graphics, $Bitmap, $GfxCtxt, $BkColor, $SpaceBetweenGUICorners
$SpaceBetweenGUICorners = 64
$BkColor = 0xFF0000
$GraphicsSizeX = 600
$GraphicsSizeY = 600
$Font = "Century Gothic"
$GUI = GUICreate( "TEST", $GraphicsSizeX+$SpaceBetweenGUICorners*2, $GraphicsSizeY+$SpaceBetweenGUICorners*2, -1, -1)
_GDIPlus_Startup()
$TestIMAGE   = _GDIPlus_ImageLoadFromFile($IMAGE)
$Graphics = _GDIPlus_GraphicsCreateFromHWND($GUI)
$Bitmap = _GDIPlus_BitmapCreateFromGraphics($GraphicsSizeX, $GraphicsSizeY, $Graphics)
$GfxCtxt = _GDIPlus_ImageGetGraphicsContext($Bitmap)
GUISetFont(8.5,400,1,$Font)
$Timer = TimerInit()
GUISetState()
Do
    _GDIPlus_GraphicsClear($GfxCtxt, 0xFF000000+$BkColor)
    ;----------------------#1----------------------;
    _GDIPlus_GraphicsSetInterpolationMode ( $GfxCtxt, 5 )
    DrawIMG($TestIMAGE,0,0,$GraphicsSizeX/2,$GraphicsSizeY/2)
    DrawText("#1 InterpolationMode = 5(Nearest-neighbor)",0,0)
    ;----------------------#2----------------------;
    _GDIPlus_GraphicsSetInterpolationMode ( $GfxCtxt, 1 )
    DrawIMG($TestIMAGE,$GraphicsSizeX/2,0,$GraphicsSizeX/2,$GraphicsSizeY/2)
    DrawText("#2 InterpolationMode = 1(Low-quality)",$GraphicsSizeX/2,0)
    ;----------------------#3----------------------;
    _GDIPlus_GraphicsSetInterpolationMode ( $GfxCtxt, 3 )
    DrawIMG($TestIMAGE,0,$GraphicsSizeY/2,$GraphicsSizeX/2,$GraphicsSizeY/2)
    DrawText("#3 InterpolationMode = 3{Bilinear)",0,$GraphicsSizeY/2)
    ;----------------------#4----------------------;
    _GDIPlus_GraphicsSetInterpolationMode ( $GfxCtxt, 5 )
    DrawIMG($TestIMAGE,$GraphicsSizeX/2,$GraphicsSizeY/2,$GraphicsSizeX/2,$GraphicsSizeY/2)
    DrawText("#4 InterpolationMode = 5(Nearest-neighbor)",$GraphicsSizeX/2,$GraphicsSizeY/2)
    ;----------------------------------------------;
    $TimerSec = Round(TimerDiff($Timer)/1000,1)
    If $TimerSec > $ExitTimer then $TimerSec = $ExitTimer
    DrawText($ExitTimer-$TimerSec&"s",0,20)
    _GDIPlus_GraphicsDrawImage($Graphics, $Bitmap, $SpaceBetweenGUICorners, $SpaceBetweenGUICorners)
    Sleep(250)
Until $TimerSec >= $ExitTimer ;Exit after 12 secounds
_GDIPlus_BitmapDispose($Bitmap)
_GDIPlus_Shutdown()
GUIDelete()
exit

Func DrawIMG($IMG,$PosX,$PosY,$SizeX=1,$SizeY=1)
;~  $PosR = IG_GetPosBS($PosX,$PosY)
;~  _GDIPlus_GraphicsDrawImageRect($GfxCtxt, $IMG, $PosR[0], $PosR[1], _
;~      NormalizeGraphicsN($DefSize*$SizeX,0), NormalizeGraphicsN($DefSize*$SizeY,1))
    _GDIPlus_GraphicsDrawImageRect($GfxCtxt, $IMG, $PosX, $PosY, _
        $SizeX, $SizeY)
    _GDIPlus_GraphicsDrawLine($GfxCtxt,$PosX,$PosY,$PosX,$PosY+$SizeY)
    _GDIPlus_GraphicsDrawLine($GfxCtxt,$PosX,$PosY,$PosX+$SizeX,$PosY+$SizeY)
    _GDIPlus_GraphicsDrawLine($GfxCtxt,$PosX,$PosY,$PosX+$SizeY,$PosY)
    _GDIPlus_GraphicsDrawLine($GfxCtxt,$PosX+$SizeY,$PosY,$PosX+$SizeY,$PosY)
;~  Return $PosR
EndFunc
Func DrawText($Text,$PosX,$PosY)
    ;Make GDIPlus DrawString text in center
;~  $L0 = GUICtrlCreateLabel($Text,0,-25)
;~  $L0C = ControlGetPos( $GUI, "", $L0 )[2]-5
;~  GUICtrlDelete($L0)
    $L0C = 0
;~  $PosR = IG_GetPosBS($PosX,$PosY)
;~  _GDIPlus_GraphicsDrawString($GfxCtxt, $Text, $PosR[0]-$L0C/2,$PosR[1], $Font, 8.5 )
    _GDIPlus_GraphicsDrawString($GfxCtxt, $Text, $PosX-$L0C/2,$PosY, $Font, 10 )
;~  Return $PosR
EndFunc

Image(3x3 size):  test.bmp

test.bmp

Edited by algiuxas

After switching years ago to Linux, sadly I don't use AutoIt anymore.

Link to comment
Share on other sites

Add this line just after $GfxCtxt = _GDIPlus_ImageGetGraphicsContext($Bitmap) and it should work

$GfxCtxt = _GDIPlus_ImageGetGraphicsContext($Bitmap)
_GDIPlus_GraphicsSetPixelOffsetMode($GfxCtxt, 2) ;this line
GUISetFont(8.5,400,1,$Font)

 

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...