Растровое изображение построено по пиксельным данным (чисто пиксельные данные). Конструкция была выполнена путем правильной настройки параметров растрового изображения, таких как hieght, width, bitcount и т. Д. Bitmap фактически сконструирован с помощью CreateDIBsection. И растровое изображение загружается на объект CStatic, имеющий свойство Bitmap как свойство.Монохромное изображение, отображаемое как цветное изображение RGB
Изображение отображается с соответствующей шириной и содержимым. Но разница только в том, что цвет контента окрашен вместо шкалы серого. Например, изображение представляет собой белое письмо H на черном Bground, вместо того, чтобы отображать его как беловатое, скажем, отображается синяя H-буква. Подобные изменения цвета применяются для разных изображений. Кроме того, иногда нежелательные цветные данные кажутся отклоняющимися от исходного содержимого изображения, кроме изменения цвета.
Bitmap - это 16-битное растровое изображение.
См. Ниже код, используемый для создания BitMap.
HDC - это контекст устройства переменной CStatic, в котором загружается созданный растровый рисунок; Я сразу установил битмап, возвращаемый функцией ниже, этой переменной, используя функцию setbitmap. CStatic varibale имеет также BitMap как одно из своих свойств. См. Ниже функцию, используемую для создания растрового изображения.
Определения параметров функции. PixMapHeight = количество строк в пиксельной матрице. PixMapWidth = количество столбцов в пиксельной матрице. BitsPerPixel = бит, хранящийся для одного пикселя. pPixMapBits = указатель Void на пиксельный массив. (Только исходные пиксельные данные 16 бит на пиксель). DoBitmapFromPixels (HDC HDC, UINT PixMapWidth, UINT PixMapHeight, UINT BitsPerPixel, LPVOID pPixMapBits)
BITMAPINFO *bmpInfo = (BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
BITMAPINFOHEADER &bmpInfoHeader(bmpInfo->bmiHeader);
bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
LONG lBmpSize = PixMapWidth * PixMapHeight * (BitsPerPixel/8);
bmpInfoHeader.biWidth = PixMapWidth;
bmpInfoHeader.biHeight = -(static_cast<int>(PixMapHeight));
bmpInfoHeader.biPlanes = 1;
bmpInfoHeader.biBitCount = BitsPerPixel;
bmpInfoHeader.biCompression = BI_RGB;
bmpInfoHeader.biSizeImage = 0;
bmpInfoHeader.biClrUsed = 0;
bmpInfoHeader.biClrImportant = 0;
void *pPixelPtr = NULL;
HBITMAP hBitMap = CreateDIBSection(Hdc, bmpInfo, DIB_RGB_COLORS, &pPixelPtr, NULL, 0);
if (pPixMapBits != NULL)
{
BYTE* pbBits = (BYTE*)pPixMapBits;
BYTE *Pix = (BYTE *)pPixelPtr;
memcpy(Pix, ((BYTE*)pbBits + (lBmpSize * (CurrentFrame - 1))), lBmpSize);
}
free(bmpInfo);
return hBitMap;
Предполагаемый выход является цифра в левой части прикрепленного файла. Но я получаю синее тонированное изображение, как в правом (не обращая внимания на проблему масштабирования и точного совпадения, поместите изображение, чтобы изобразить проблему).
А также будет очень полезно, если я знаю, как значения RGB, хранятся в 16 бит!
Здесь недостаточно информации, но я бы предсказал, что у вас есть один 8-битный канал, и он отображается с палитрой по умолчанию, которая не является палитрой оттенков серого. –
Возможно, вам следует показывать обе фотографии, которые отображаются, и другую, которая выглядит так, как вы ожидаете. –
Вы говорите, что это 16-битное растровое изображение, поэтому оно не монохромно. (Монохромный означает один бит на пиксель. После того, как вы это исправите, вам нужно знать, что blitting монохромные растровые изображения в назначении цвета используют цвет текста и фона для отображения черно-белого.) –