{{notification.text}}

MirGames

Aywan
15.09.06 19:57
0
Вообщем гружу битмап(ну как положено в HBITMAP). А как его на форму нарисовать не знаю...
Помогите!!!
#1
аксакал
15.09.06 21:17
0
Создать HDC (CreateCompatibleDC), привязать к нему HBITMAP (SelectObject) и вывести через BitBlt
#2
Aywan
16.09.06 08:04
0
Наверное я большои глюк...

Код

DCB  : HDC;
LT:HBITMAP;

...

LT:=LoadBitmapsFromFile('LT.bmp');


Код
function LoadBitmapsFromFile(Name:string):HBITMAP;
var
    HGlobal: THandle;

    FileHeader: BITMAPFILEHEADER;
    InfoHeader: BITMAPINFOHEADER;
    Palette: array of RGBQUAD;
    BitmapLength: LongWord;
    PaletteLength: LongWord;
    ReadBytes: LongWord;
    Width, Height : Integer;
    pData : Pointer;

begin
HGlobal  := CreateFile(PChar(Name), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
ReadFile(HGlobal, FileHeader, SizeOf(FileHeader), ReadBytes, nil);
ReadFile(HGlobal, InfoHeader, SizeOf(InfoHeader), ReadBytes, nil);

PaletteLength := InfoHeader.biClrUsed;

SetLength(Palette, PaletteLength);
ReadFile(HGlobal, Palette, PaletteLength, ReadBytes, nil);

Width  := InfoHeader.biWidth;
Height := InfoHeader.biHeight;

BitmapLength := InfoHeader.biSizeImage;

if BitmapLength = 0 then BitmapLength := Width * Height * InfoHeader.biBitCount Div 8;

GetMem(pData, Width * Height*3);
ReadFile(HGlobal, pData^, BitmapLength, ReadBytes, nil);

closehandle(HGLOBAL);
result:=CreateBitmap(Width,Height,InfoHeader.biPlanes,InfoHeader.biBitCount,pdata);
end;

Гружу я так....
А рисую:
Код

...
WM_PAINT :
           begin
             DCB:=CreateCompatibleDC(DC);
             SelectObject(DCB,LT);
             BitBlt(DC,0,0,100,100,DCB,0,0,MergePaint);
           end;



Что надо вместо MergePaint, и правильноли я гружу бмп?
Отредактировано: 16.09.06 08:07
#3
аксакал
16.09.06 16:43
0
SRCCOPY
#4
Aywan
16.09.06 17:23
0
А как правильно грузить битмап не подскажите?
#5
аксакал
16.09.06 18:13
0
Aywan
Твой код ошибку даёт?
Попробуй грузить из ресурса (LoadBitmap) если ситуация аналогична, ищи ошибку в другом месте.
#6
Aywan
16.09.06 19:39
0
Пробовал из ресурса... Вообще ничего нет!
А вот если моей функцией, то рисуется черный прямоугольник...
Немножко изменил код...
Код

function LoadBitmapsFromFile(Name:string):HBITMAP;
var
    HGlobal: THandle;
    BitmapInfo:TBitmapInfo;
    FileHeader: BITMAPFILEHEADER;
    Palette: array of RGBQUAD;
    BitmapLength: LongWord;
    PaletteLength: LongWord;
    ReadBytes: LongWord;
    Width, Height : Integer;
    pData : Pointer;
    DCB:HDC;
begin
HGlobal  := CreateFile(PChar(Name), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
ReadFile(HGlobal, FileHeader, SizeOf(FileHeader), ReadBytes, nil);
ReadFile(HGlobal, BitmapInfo.bmiHeader, SizeOf(BitmapInfo.bmiHeader), ReadBytes, nil);

PaletteLength := BitmapInfo.bmiHeader.biClrUsed;

SetLength(Palette, PaletteLength);
ReadFile(HGlobal, Palette  , PaletteLength, ReadBytes, nil);

Width  := BitmapInfo.bmiHeader.biWidth;
Height := BitmapInfo.bmiHeader.biHeight;

BitmapLength := BitmapInfo.bmiHeader.biSizeImage;

if BitmapLength = 0 then BitmapLength := Width * Height * BitmapInfo.bmiHeader.biBitCount Div 8;

GetMem(pData, Width * Height*3);
ReadFile(HGlobal, pData^, BitmapLength, ReadBytes, nil);

closehandle(HGLOBAL);

DCB:=CreateCompatibleDC(0);
//result:=CreateDIBSection(DCB,BitmapInfo,DIB_RGB_COLORS,pdata,0,0);
result:=CreateDIBitmap(DCB,BitmapInfo.bmiHeader,DIB_RGB_COLORS,pdata,BitmapInfo,0);
//result:=CreateBitmap(50,50,1,24,pdata);
DeleteDc(DCB);
end;
#7
Aywan
16.09.06 19:42
0
Может надо какойнть график моде установить на окно?..
#8
Aywan
16.09.06 21:14
0
Похоже баг был в БМПэшке... Вообщем когда из фотошопа она сразу попадала в операйионную, не грузилсася... Все вроде работает.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}