Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

auxDIBImageLoadA для TBitmap? (glaux.dll)   Найти похожие ветки 

 
WondeRu ©   (2004-06-18 09:25) [0]

Здравствуйте!
У меня проблема: нужно загрузить текстуру не из файла, а из TBitmap! GetDIBits не подходит из-за своей глюковатости!
Может есть функция наподобие auxDIBImageLoadA для TBitmap?
Помогите, плизззз!
Заранее спасибо!


 
MBo ©   (2004-06-18 09:41) [1]

>GetDIBits не подходит из-за своей глюковатости!
?


 
WondeRu ©   (2004-06-18 10:03) [2]

>MBo ©   (18.06.04 09:41) [1]
угу!
сейчас использую именно ее, но предварительно развиваю битмап на более мелкие фрагменты по 64Кб каждый! Если рамер картинки более 64Кб то она возвращает 0 - ошибку(((( Что посоветуете?


 
MBo ©   (2004-06-18 12:20) [3]

>Если рамер картинки более 64Кб то она возвращает 0 - ошибку
не сталкивался, все работало нормально

>Что посоветуете?
показать минимальный код, приводящий к ошибке


 
WondeRu ©   (2004-06-18 13:01) [4]

[code]
............................
 try
   Bitmap := TBitmap.Create;
   Bitmap.PixelFormat := pf32bit;

   Bitmap.Width  := 1024;
   Bitmap.Height := 1024;

   SetStretchBltMode(dc, MAXSTRETCHBLTMODE);
 
   if not StretchBlt(Bitmap.Canvas.Handle,     // handle to destination DC
                     0,                        // x-coord of destination upper-left corner
                     0,                        // y-coord of destination upper-left corner
                     Bitmap.Width,             // width of destination rectangle
                     Bitmap.Height,            // height of destination rectangle
                     BitmapTemp.Canvas.Handle, // handle to source DC
                     0,                        // x-coord of source upper-left corner
                     0,                        // x-coord of source upper-left corner
                     BitmapTemp.Width,         // width of source rectangle
                     BitmapTemp.Height,        // height of source rectangle
                     SRCCOPY)                  // raster operation code
     then  ShowError(True,"StretchBlt");

   fxmin := 0;
   fxmax := BitmapTemp.Width;
   fymin := 0;
   fymax := BitmapTemp.Height;

   //MemDC := CreateCompatibleDC(0);
   //GetLastError;

   try
     try
       SetLength(Data, Bitmap.Width * Bitmap.Height * 4);
       GetLastError;
     except
       on e: Exception do
         begin
           OutputDebugString(PChar("TAPlan.PrepareImage1 in uPlanClass with message: " + e.Message));
           GrEvents.OnError("Ошибка выделения памяти для текстуры");
           Exit;
         end;
     end;

           FillChar (BMInfo, SizeOf(BMInfo), 0);
           with BMinfo.bmiHeader do
             begin
               biSize        := sizeof(TBitmapInfoHeader);
               biBitCount    := 24;
               biWidth       := Bitmap.Width;
               biHeight      := Bitmap.Height;
               biPlanes      := 1;
               biCompression := BI_RGB;

               //SelectObject(HDC, HBITMAP)
               if  GetDIBits (Bitmap.Canvas.Handle,
                              Bitmap.Handle,
                              0,
                              biHeight,
                              @Data[tmp],
                              BMInfo,
                              DIB_RGB_COLORS) = 0
                 then
...................................                    
[/code]


 
WondeRu ©   (2004-06-18 13:11) [5]

ошибка происходит не сразу, а где-то после 20-й загрузки текстуры!


 
MBo ©   (2004-06-18 13:20) [6]

Bitmap.PixelFormat := pf32bit;
и
biBitCount    := 24;
как согласуются?

> @Data[tmp],
почему используется не нулевой элемент?

может, попробовать вызывать GetDIBits c nil сначала для корректного заполнения BitmapInfo?


 
WondeRu ©   (2004-06-18 13:25) [7]

>как согласуются?
нормально (наверно)
>может, попробовать вызывать GetDIBits c nil сначала для корректного заполнения BitmapInfo?
не хочет он заполнять почему-то, все в нулях(((


 
WondeRu ©   (2004-06-18 14:14) [8]

>как согласуются?
здесь все пучком! 3 байта на точку!


 
MBo ©   (2004-06-18 14:21) [9]

>здесь все пучком! 3 байта на точку!
а здесь - 4 байта:
Bitmap.PixelFormat := pf32bit;


 
WondeRu ©   (2004-06-18 14:29) [10]

исправил
Bitmap.PixelFormat := pf32bit;
на
Bitmap.PixelFormat := pf24bit;
не помогло! те же траблы!


 
MBo ©   (2004-06-18 15:06) [11]


 b: TBitmap;
 cnt: Integer = 0;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 b := TBitmap.Create;
 b.PixelFormat := pf24bit;
 b.Width := 1024;
 b.Height := 1024;
 Randomize;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 b.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 Info: TBitmapInfo;
 Data: array of byte;
begin
 b.Canvas.Brush.Color := Random(256 * 256 * 256);
 b.Canvas.FillRect(Rect(0, 0, 1024, 1024));
 Canvas.StretchDraw(Rect(0, 0, 64, 64), b);
 FillChar(Info, sizeOf(Info), 0);
 Info.bmiHeader.biSize := sizeOf(Info);
 GetDiBits(B.Canvas.Handle, B.Handle, 0, b.Height, nil, Info, DIB_RGB_COLORS);
 SetLength(Data, info.bmiHeader.biSizeImage);
//или ((ширина*BPP) округлить вверх до кратного 4)*высота
 GetDiBits(B.Canvas.Handle, B.Handle, 0, b.Height, @Data[0], Info, DIB_RGB_COLORS);
 Memo1.Lines.Add(Format("%d %d %d",
   [Cnt, GetBValue(b.Canvas.Brush.Color), Data[0]]));
 Inc(Cnt);
 if Cnt = 1000 then Timer1.Enabled := False;
end;



 
WondeRu ©   (2004-06-18 15:43) [12]

>Info.bmiHeader.biSize := sizeOf(Info);
????
может Info.bmiHeader.biSize := sizeOf(Info.bmiHeader)?


 
MBo ©   (2004-06-18 15:55) [13]

>может Info.bmiHeader.biSize := sizeOf(Info.bmiHeader)?
да


 
WondeRu ©   (2004-06-18 16:43) [14]

все равно иногда возникают ошибки!
а может быть трабл, если моя форма находится в ActiveX dll?



Страницы: 1 вся ветка

Текущий архив: 2004.09.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.056 c
6-1088615393
leonidus
2004-06-30 21:09
2004.09.05
Чем заменить idHTTP


14-1092750205
Cosinus
2004-08-17 17:43
2004.09.05
Хм... А почему через стандартный OpenDialog нельзя открыть *.FON


1-1092984139
[BAD]Angel
2004-08-20 10:42
2004.09.05
Как вывести текст на рабочий стол?


1-1092998820
Jiuraasdasd
2004-08-20 14:47
2004.09.05
Как создать собственный тип данных?


1-1093071320
Islander
2004-08-21 10:55
2004.09.05
Как поменять местами элементы в ListView?