65.9K
CodeProject is changing. Read more.
Home

Displaying split Bitmap files

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.10/5 (10 votes)

Jun 19, 2003

viewsIcon

80073

downloadIcon

3492

CSplitBitmap is a Class to load, split and display BMP files

Introduction

I was thinking about making a puzzle game. I found in a book, a chapter about using bitmaps, but it was not explained how to display a part of a bitmap, but I knew this was possible. After some searching and reading, I was able to write the CSplitBitmap class.

Using the code

Using the CSplitBitmap class is very simple. Just declare and object.

CSplitBitmap splitobj;

The next thing to do is to load a bitmap image like this:

splitobj.LoadImage("c:\\images\\foto.jpg");
//the next line of code splits the image in 3 x 3 parts. 
//The width and height of these parts are the same
splitobj.SplitBitmap(3,3);

In my example I used the OnDraw() function of the View class to display the image and the other parts.

void CBitmaptestView::OnDraw(CDC* pDC)
{
    CBitmaptestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    CMemDC dc(pDC);

    if(_bmpLoaded)
    {
        //this function is used to display the whole image
        _obj.DrawEntireBitmap(dc,10,300);
        // there the different parts of the 
        //splitted image are drawn in the window
        _obj.DrawPartOfBitmap(dc,10,10,1,1);
        // part 2,1
        _obj.DrawPartOfBitmap(dc,80,10,2,1);
        // part 3,1
        _obj.DrawPartOfBitmap(dc,150,10,3,1);
        //...
        _obj.DrawPartOfBitmap(dc,10,80,1,2);
        _obj.DrawPartOfBitmap(dc,80,80,2,2);
        _obj.DrawPartOfBitmap(dc,150,80,3,2);
        _obj.DrawPartOfBitmap(dc,10,150,1,3);
        _obj.DrawPartOfBitmap(dc,80,150,2,3);
        _obj.DrawPartOfBitmap(dc,150,150,3,3);

        // here we select a part of the picture. 300 and 10 are 
        // the x- and y-coordinates of the picture 
        // in the view-window
        // 100 and 100 are the coordinates of the 
        // TopLeft-point were the part starts
        // 30 and 30 are the width and height of the selected part
        _obj.DrawCustomBMP(dc,300,10,100,100,30,30);

    }

    dc.TextOut(_mouseLoc.x,_mouseLoc.y,
        "press left mousebutton to load a bmp-file");
}

Some other functions:

  • long GetBMPHeight(): returns the height of the loaded image.
  • long GetBPWidth(): returns the width of the loaded image.

Conclusion

For the future I was thinking about adding some member functions to alter the width and height of a bitmap. I still didn't figured out how to do it, but I'm sure I can. :p

Acknowledgement

I want to thank Keith Rule because I used his CMemDC class to stop the flickering of the view-window of my demo application.