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

Вниз

hDIB для TBitmap   Найти похожие ветки 

 
Unknown user ©   (2005-06-11 22:19) [0]

Нашел функцию RotateBitmap(var hDIB: HGlobal; radang: Double; clrBack: TColor): Boolean для поворота изображения на угол radang. Но не могу придумать как добыть hDIB из TBitmap. Дело в том, что дальше в функции идут такие строки:

lpbi := PBitmapInfoHeader(GlobalLock(hdIB));
nHeaderSize := lpbi^.biSize + lpbi^.biClrUsed * SizeOf(TRGBQUAD);
lpDIBBits := Pointer(Longint(lpbi) + nHeaderSize);

где

lpDIBBits: Pointer;
lpbi, hDIBResult: PBitmapInfoHeader;

т.е, подразумевается что в функцию передается ссылка на TBitmapInfoHeader за которым непосредственно следуют биты изображения. Как мне получить hDIB для TBitmap?


 
Ученик   (2005-06-11 22:36) [1]

>Unknown user ©   (11.06.05 22:19)  

Не знаю есть ли в Delphi 5



{ Graphics.pas }

procedure GetDIBSizes(Bitmap: HBITMAP; var InfoHeaderSize: DWORD;
 var ImageSize: DWORD);
function GetDIB(Bitmap: HBITMAP; Palette: HPALETTE; var BitmapInfo; var Bits): Boolean;



 
Unknown user ©   (2005-06-11 22:56) [2]

2 Ученик
Для var BitmapInfo; var Bits в GetDIB надо предварительно выделить память, размер которой и возращает GetDIBSizes. Меня это не усраивает так как изображения с которыми я работаю большие и создавать его копию в памяти нежелательно, и потом за var BitmapInfo точно следует само изображение? По моему это две разные структуры в памяти.


 
Ученик   (2005-06-11 23:21) [3]

>Unknown user ©   (11.06.05 22:56) [2]

 GetDIBSizes(Bitmap.Handle, BitmapInfoSize, BitmapBitsSize);
 DIB := AllocMem(BitmapInfoSize + BitmapBitsSize);
 try
   Bits := Pointer(DWORD(Bitmap) + BitmapInfoSize);
   ...
 finally
   FreeMem(DIB)
 en;


 
Ученик   (2005-06-11 23:24) [4]

>Ученик   (11.06.05 23:21) [3]

Поправка

 Bits := Pointer(DWORD(DIB) + BitmapInfoSize);


 
-=XP=- ©   (2005-06-12 08:20) [5]

Bitmap.Handle?


 
Ученик   (2005-06-12 10:17) [6]

>-=XP=- ©   (12.06.05 08:20) [5]



procedure TForm1.Button1Click(Sender: TObject);
begin
 with TBitmap.Create do try
   Width  := 16;
   Height := 16;
   case HandleType of
     bmDIB: ShowMessage("DIB");
     bmDDB: ShowMessage("DDB");
   end
 finally
   Free
 end
end;



 
Unknown user ©   (2005-06-13 10:10) [7]

2 Ученик.
Спасибо за совет по размещению одной структуры в памяти непосредственно за другой. Но есть ли способ для TBitmap получить ссылку на область TBitmapInfo, считанную из файла. Хранится ли она вообще в памяти. А ссылку на BitmapBits возращает ScanLine[Bitmap.Height-1]. Верно?


 
Ученик   (2005-06-13 19:35) [8]

>Unknown user ©   (13.06.05 10:10) [7]
Для TBitmap считанного из файла скорее всего будет HandleType=bmDIB, поэтому почему бы не попробовать вариант -=XP=- ©   (12.06.05 08:20) [5] :-)

>А ссылку на BitmapBits возращает ScanLine[Bitmap.Height-1]. Верно?

Не всегда



function TBitmap.GetScanLine(Row: Integer): Pointer;
begin
 Changing(Self);
 with FImage.FDIB, dsbm, dsbmih do
 begin
   if (Row < 0) or (Row >= bmHeight) then
     InvalidOperation(@SScanLine);
   DIBNeeded;
   GDIFlush;
   if biHeight > 0 then  // bottom-up DIB
     Row := biHeight - Row - 1;
   Integer(Result) := Integer(bmBits) +
     Row * BytesPerScanline(biWidth, biBitCount, 32);
 end;
end;



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

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

Наверх





Память: 0.46 MB
Время: 0.011 c
14-1122121196
Димитрий
2005-07-23 16:19
2005.08.14
Точки пересечения двух окружностей


1-1122020655
Profik
2005-07-22 12:24
2005.08.14
Текст с картинками


14-1122357192
Ega23
2005-07-26 09:53
2005.08.14
С днем рождения! 26 июля


14-1122037244
oldman
2005-07-22 17:00
2005.08.14
Дайте, пожалуйста ссылочку на литературу для идиотов!


1-1122496763
muny
2005-07-28 00:39
2005.08.14
функция power





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский