BMPをネットからIplImageに読み込み

インターネット上のBMPファイルをIplImageに読み込んで表示させてみたい。

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")

#include <cv.h>
#include <highgui.h>
#include <iostream>

#using <System.dll>

using namespace std;
using namespace System;
using namespace System::IO;
using namespace System::Net;

IplImage* GetIplImage()
{
	IplImage *img = 0;
	//width,heightは決め打ち
	img = cvCreateImage(cvSize(512, 512), IPL_DEPTH_8U, 3);

	int byte = 0;
	int count = 0;

	String^ url = "http://ninoseki.ps.land.to/Mandrill.bmp";

	HttpWebRequest^ request = (HttpWebRequest^)(WebRequest::Create(url));
	HttpWebResponse^ response = (HttpWebResponse^)(request->GetResponse());
	Stream^ receiveStream = response->GetResponseStream();

	while (byte != -1){
		byte = receiveStream->ReadByte();

		if (byte == -1){
			cout << "end" << endl;
		}else{
			img->imageData[count] = (unsigned char)byte;
		}
		count ++;
	}
	cout << count << endl;

	response->Close();
	receiveStream->Close();

	return img;
}

int main()
{
	IplImage *img = 0;

	img = GetIplImage();
	//cvFlip(img, img);

	cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
	cvShowImage("test", img);
	cvWaitKey(0);

	cvSaveImage("test.jpg", img);

	cvDestroyWindow("test");
	cvReleaseImage(&img);

	return 0;
}

・実行結果

うーん。上下反転しているのはいいとしても、18画素ずれてるのはよろしくない。
なんでこうなるんだろうか。
OpenCVもBitmapもBGR順だからそこで間違いはない。
Bitmapのデータ構造をそのままIplImageのimageDataに突っ込んでるのがいけないのかな?
だれか教えてください。