Jump to content

  • Log In with Google      Sign In   
  • Create Account

blurry images


Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.


  • You cannot reply to this topic
6 replies to this topic

#1 Nick_Black   Members   -  Reputation: 111

Like
0Likes
Like

Posted 07 April 2014 - 08:57 PM

My apolagy's for mot doing a full introduction of myself on my first post (I'll do that later, this site looks quite intriguing) but I'm to buisy coding atm to do that now.


anywho. I'm making a game, but I'm having an issue with importing bitmaps, i try to load them in 1:1 so that I know the pixel size of evrything, but all the images seem to be compressed and warped one way or another. here is how I go about loading in a bmp (dxd9 lib's & headers included already and whatnot)

 

// Loading in the bmp file (it's a 24 bit image, but changing the format doesn't seem to do anything except make it dissapear, or become a black box)

    D3DXCreateTextureFromFileEx(d3ddev,    // the device pointer
                                L"MainChar.bmp",    // the new file name
                                D3DX_DEFAULT,    // default width
                                D3DX_DEFAULT,    // default height
                                D3DX_DEFAULT,    // no mip mapping
                                NULL,    // regular usage
                                D3DFMT_A8R8G8B8,    // 32-bit pixels with alpha
                                D3DPOOL_MANAGED,    // typical memory handling
                                D3DX_DEFAULT,    // no filtering
                                D3DX_DEFAULT,    // no mip filtering
                                D3DCOLOR_XRGB(255, 0, 255),    // the hot-pink color key
                                NULL,    // no image info struct
                                NULL,    // not using 256 colors
                                &MainChar);    // load to sprite

// ^ credit to where credit's due, this is pretty much the same way DirectX tutorial.com does it, only changed the pointer name basicly.

 // show the image:

d3dspt->Draw(MainChar, NULL, &center, &position, D3DCOLOR_ARGB(255,255, 255, 255));

// and of course clear the image when done:

if (sprite != NULL)sprite->Release();

If you feel you need to see more code, I'll attach a working bit of code + img to this code (I'll leave out the background image to spare this server a few byte's of burden, wich is also why I compressed it, if you don't trust it, let me know and maybe I'll upload the code un-compressed)


any suggestions will be greatly appreciated!

Attached Files



#2 Aardvajk   Crossbones+   -  Reputation: 11175

Like
3Likes
Like

Posted 08 April 2014 - 02:44 AM

First thought is are you aware that that load method will automatically stretch the image dimensions to a power of 2 if that's all the hardware supports (very common)?

 

If your bitmaps aren't power of 2 dimension, you'll need to load them into a texture in a different way, then use texture coordinates to render the correct part of the texture.

 

https://www.google.co.uk/search?q=texture+atlas&oq=texture+atlas&aqs=chrome..69i57j0l5.1692j0j8&sourceid=chrome&espv=210&es_sm=93&ie=UTF-8

 

[EDIT] I see your bitmap is 50x50, that is probably being stretched to 64x64


Edited by Aardvajk, 08 April 2014 - 03:31 AM.


#3 Nick_Black   Members   -  Reputation: 111

Like
1Likes
Like

Posted 08 April 2014 - 08:21 AM

First thought is are you aware that that load method will automatically stretch the image dimensions to a power of 2 if that's all the hardware supports (very common)?

Doh! yes, I was aware, of this, I just completly forgot >.< Thank you! and the Texture atlas is also a good Idea. Thanks!



#4 Nick_Black   Members   -  Reputation: 111

Like
0Likes
Like

Posted 08 April 2014 - 07:28 PM

alright, less rush this time, since, Thanks to Aardvajk's suggestion, at least the measurements line up properly. but the images I'm getting are still blurry as such:

Blurry.png

 

the top left square is the image I'm using, and the 4 squares in the cyan is how my program shows it.

I've changed:

D3DFMT_A8R8G8B8 -> D3DFMT_UNKNOWN with no effect,

I've also tried a few filters with no effect (possible I'm trying the wrong filters, though I don't think filtering is the problem)

The bmp I'm using is 512x512 (2^9) 24 bit.

sorry for asking 2 questions in a row, I can normally figure this stuff out, but for some reason I can't atm.

but thank you in advance!


EDIT: Made some progress on my own; it seems like lining up the pxels to the texels is at least part of the problem, since shifting the image over by 0.5 does change how blurry it is, but I have yet to suceed at getting it chrisp.
 


Edited by Nick_Black, 08 April 2014 - 09:26 PM.


#5 Endurion   Crossbones+   -  Reputation: 4776

Like
3Likes
Like

Posted 08 April 2014 - 11:48 PM

The keyword here is directly mapping texels to pixels. Looky here (http://msdn.microsoft.com/en-us/library/windows/desktop/bb219690(v=vs.85).aspx)

 

 

Another cause of unwanted blurring may be if the backbuffer size does not match up the used client area size of the window.


Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>

#6 Nick_Black   Members   -  Reputation: 111

Like
0Likes
Like

Posted 09 April 2014 - 11:07 AM

Another cause of unwanted blurring may be if the backbuffer size does not match up the used client area size of the window.

yes! that was the issue, I didn't realize that having a border shrinks the DC inside, so I got rid of the border + adjust for the pixel/texels and now all is nice and chrispy like a warm taco shell. thank you!



#7 Endurion   Crossbones+   -  Reputation: 4776

Like
1Likes
Like

Posted 09 April 2014 - 11:17 PM

If you still want a border you can look into AdjustWindowRect(Ex). It calculates a window rect from the wanted client rect size and the windows (ex) styles of your window.


Fruny: Ftagn! Ia! Ia! std::time_put_byname! Mglui naflftagn std::codecvt eY'ha-nthlei!,char,mbstate_t>




Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.




PARTNERS