В наличии имеется массив (r, g, b), который надо вывести в Image. Использование Pixels[][], а также ScanLine неприемлимо, т.к. неудовлетворяет скорость работы. Думаю, надо использовать BitBlt, но как это сделать?
Здравствуйте zmd, Вы писали:
zmd>imExample->>Picture->Bitmap->Handle = ResBitmap;
zmd>чего-то не так — ошибку выдает Access violation ... in module gdi32.dll
Здравствуйте piAnd, Вы писали:
A>Здравствуйте zmd, Вы писали:
zmd>>imExample->>Picture->Bitmap->Handle = ResBitmap;
zmd>>чего-то не так — ошибку выдает Access violation ... in module gdi32.dll
A>Боюсь советовать, может быть так пойдет: A>
imExample->>>Picture->Bitmap=(TBitmap *)ResBitmap;
A>
Здравствуйте zmd, Вы писали:
zmd>В наличии имеется массив (r, g, b), который надо вывести в Image. Использование Pixels[][], а также ScanLine неприемлимо, т.к. неудовлетворяет скорость работы. Думаю, надо использовать BitBlt, но как это сделать?
zmd>в цикле заполняется DWORD ResCl zmd>ResCl[x + y*144] = 0 + ((r << 16) | (g << 8) | (b));BITMAPINFO* bmpInfo;
zmd>затем zmd>BITMAPINFO* bmpInfo; zmd>HDC cdc = CreateCompatibleDC(NULL); zmd>ResBitmap = CreateCompatibleBitmap(cdc, 176, 144); zmd>SetDIBits(cdc, ResBitmap, 0, 144, ResCl, bmpInfo, DIB_RGB_COLORS);
imExample->>Picture->Bitmap->Handle = ResBitmap;
zmd>чего-то не так — ошибку выдает Access violation ... in module gdi32.dll
А если попробовать перед строкой
imExample->Picture->Bitmap->Handle = ResBitmap;
добавить
imExample->Picture->Bitmap->ReleaseHandle();
???
Хотя описанное странное поведение действительно странно... Есть еще предложение — попробуйте записать полученный битмап в файл *.bmp и посмотреть — а есть ли мальчик (то бишь рисунок). Есть сомнения, что AV возникает из-за того, что что-то не так именно в массиве полученных байт... То есть битмап битый получается. Все может быть...
Здравствуйте zmd, Вы писали:
zmd>В наличии имеется массив (r, g, b), который надо вывести в Image. Использование Pixels[][], а также ScanLine неприемлимо, т.к. неудовлетворяет скорость работы. Думаю, надо использовать BitBlt, но как это сделать?
zmd>в цикле заполняется DWORD ResCl zmd>ResCl[x + y*144] = 0 + ((r << 16) | (g << 8) | (b));BITMAPINFO* bmpInfo;
zmd>затем zmd>BITMAPINFO* bmpInfo; zmd>HDC cdc = CreateCompatibleDC(NULL); zmd>ResBitmap = CreateCompatibleBitmap(cdc, 176, 144); zmd>SetDIBits(cdc, ResBitmap, 0, 144, ResCl, bmpInfo, DIB_RGB_COLORS);
imExample->>Picture->Bitmap->Handle = ResBitmap;
zmd>чего-то не так — ошибку выдает Access violation ... in module gdi32.dll
функция
int SetDIBits(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse)
HDC hdc; /* handle of device context */
HBITMAP hbmp; /* handle of bitmap */
UINT uStartScan; /* starting scan line */
UINT cScanLines; /* number of scan lines */const void FAR* lpvBits; /* address of array with bitmap bits */
BITMAPINFO FAR* lpbmi; /* address of structure with bitmap data */
UINT fuColorUse; /* type of color indices to use */
Там сказано, что UINT cScanLines есть число скан лайнов, а у Вас это "ширина" битмэпа , судя по ResCl
Может в этом дело?
Здравствуйте piAnd, Вы писали:
A>Здравствуйте zmd, Вы писали:
zmd>>В наличии имеется массив (r, g, b), который надо вывести в Image. Использование Pixels[][], а также ScanLine неприемлимо, т.к. неудовлетворяет скорость работы. Думаю, надо использовать BitBlt, но как это сделать?
zmd>>в цикле заполняется DWORD ResCl zmd>>ResCl[x + y*144] = 0 + ((r << 16) | (g << 8) | (b));BITMAPINFO* bmpInfo;
zmd>>затем zmd>>BITMAPINFO* bmpInfo; zmd>>HDC cdc = CreateCompatibleDC(NULL); zmd>>ResBitmap = CreateCompatibleBitmap(cdc, 176, 144); zmd>>SetDIBits(cdc, ResBitmap, 0, 144, ResCl, bmpInfo, DIB_RGB_COLORS);
imExample->>>Picture->Bitmap->Handle = ResBitmap;
zmd>>чего-то не так — ошибку выдает Access violation ... in module gdi32.dll
A>функция A>
A>int SetDIBits(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse)
A>HDC hdc; /* handle of device context */
A>HBITMAP hbmp; /* handle of bitmap */
A>UINT uStartScan; /* starting scan line */
A>UINT cScanLines; /* number of scan lines */
A>const void FAR* lpvBits; /* address of array with bitmap bits */
A>BITMAPINFO FAR* lpbmi; /* address of structure with bitmap data */
A>UINT fuColorUse; /* type of color indices to use */
A>
A>Там сказано, что UINT cScanLines есть число скан лайнов, а у Вас это "ширина" битмэпа , судя по ResCl A>Может в этом дело?
144 — это высота битмапа. я понял, что в этом параметре именно она указывается