Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Media";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.073 c
8-1087466421
ПсихЪ
2004-06-17 14:00
2004.09.05
Wave.pas, Wave.dcu - где взять?


3-1092225110
Barcebel
2004-08-11 15:51
2004.09.05
Извлечение данных посредством ADODataSet


1-1092512912
European
2004-08-14 23:48
2004.09.05
Application.ProcessMessages, модальная форма и длительный цикл


3-1091974607
VID
2004-08-08 18:16
2004.09.05
Где живёт подробное описание SQL-команд на русском ?


1-1092954505
Profi
2004-08-20 02:28
2004.09.05
Загрузка файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский