
06.02.2011, 18:37
|
Активный
|
|
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
|
|
Неужели никто не знает ответа..............я уже весь гугл облазил но ничего не нашел вот что я пытаюсь сделать:
Код:
procedure TForm1.BitmapToGLBitmap(ABitmap: TBitmap; var PicData: pointer);
type TADataC = array[0..2] of GLuByte;
TADataW = array of TADataC;
TAData = array of TADataW;
TRGBArray = array[0..0] of TRGBTriple;
PRGBArray = ^TRGBArray;
var AData: TAData;
x, y: integer;
col: PRGBarray;
r, g, b: byte;
begin
if (ABitmap.Width = 0) or (ABitmap.Height = 0) then
begin
PicData:= nil;
exit;
end;
SetLength(AData, ABitmap.Width);
for x:= 0 to ABitmap.Width - 1 do
SetLength(AData[x], ABitmap.Height);
ABitmap.PixelFormat:= pf24bit;
for y:= 0 to ABitmap.Height - 1 do
begin
col:= ABitmap.ScanLine[y];
for x:= 0 to ABitmap.Width - 1 do
begin
r:= col[x].rgbtRed; g:= col[x].rgbtGreen; b:= col[x].rgbtBlue;
AData[x][y][0]:= r;
AData[x][y][1]:= g;
AData[x][y][2]:= b;
end;
end;
PicData:= AData;
end;
.....
procedure TForm1.FormDblClick(Sender: TObject);
begin
if OD1.Execute then
begin
Pic.LoadFromFile(OD1.FileName);
doDraw;
end;
end;
procedure TForm1.doDraw;
var b: TBitmap;
ImPointer: Pointer;
begin
doQuard(1);
if Pic.Graphic <> nil then
begin
b:= TBitmap.Create;
b.Assign(Pic.Graphic);
BitmapToGLBitmap(b, ImPointer);
glEnable(GL_ALPHA_TEST);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glRasterPos2d(nX, nY);
glPixelZoom(Abs(2 * nX / Pic.Graphic.Width), Abs(2 * nY / Pic.Graphic.Height));
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDrawPixels(Pic.Graphic.Width, Pic.Graphic.Height, GL_RGB,
GL_UNSIGNED_BYTE, ImPointer); //<-вот здесь сильно ругается
SwapBuffers(DC);
b.Free;
end;
end;
__________________
APPLICATION.TERMINATOR
|