В моем проекте MFC мне нужно прочитать и преобразовать файл с монохромным растровым изображением в CByteArray. При чтении растрового файла с использованием класса «CFile» с режимом «Чтение» кажется, что он дает больше длины, чем его оригинал.Чтение и конвертирование монохромного файла растрового изображения в CByteArray MFC
Мой МФЦ код: -
CFile ImgFile;
CFileException FileExcep;
CByteArray* pBinaryImage = NULL;
strFilePath.Format("%s", "D:\\Test\\Graphics0.bmp");
if(!ImgFile.Open((LPCTSTR)strFilePath,CFile::modeReadWrite,&FileExcep))
{
return NULL;
}
pBinaryImage = new CByteArray();
pBinaryImage->SetSize(ImgFile.GetLength());
// get the byte array's underlying buffer pointer
LPVOID lpvDest = pBinaryImage->GetData();
// perform a massive copy from the file to byte array
if(lpvDest)
{
ImgFile.Read(lpvDest,pBinaryImage->GetSize());
}
ImgFile.Close();
Примечание: длина Файл был установлен в ByteArray, OBJ.
Я проверил с C# с помощью следующей выборки: -
Bitmap bmpImage = (Bitmap)Bitmap.FromFile("D:\\Test\\Graphics0.bmp");
ImageConverter ic = new ImageConverter();
byte[] ImgByteArray = (byte[])ic.ConvertTo(bmpImage, typeof(byte[]));
При сравнении размера «pBinaryImage» и «ImgByteArray», его не то же, и я предполагаю, что «ImgByteArray» размер является правильным, так как из это значение массива, я могу вернуть свое оригинальное растровое изображение.
Ваш пример C# анализирует заголовок растрового изображения и дает только пиксели. Ваш пример MFC читает весь битмап, включая заголовки, и вы не знаете, где находятся данные пикселя. Перед чтением необходимо знать формат растрового файла. –
@RogerRowland: Спасибо за ваш комментарий. Я проверил оба размера bytearray с моими другими растровыми изображениями. В большинстве случаев оба они одинаковы. Для нескольких растровых изображений это не так. Тогда только я сомневался в размере, который нужно прочитать. Было бы полезно для меня, если вы дадите решение. – user3214228