CreateMappedBitmap() :-)
Îäèí èç ïàpàìåòpîâ yêàçàòåëü íà COLORMAP, â íåì äëÿ 16 îñíîâíûõ öâåòîâ äåëàåøü ïåpåêîäèpîâêy, öâåòà ïîäáåpåøü ñàì èç ïpèíöèïà:
Serge Zakharchuk
(2:5060/32)Òàê íà ñàìîì äåëå âîò êàê äåëàåòñÿ äàííàÿ çàäà÷à:
procedure Tform1.aaa(bmpFrom,bmpTo:Tbitmap);
var
TmpImage,Monobmp:TBitmap;
IRect:TRect;
begin
MonoBmp := TBitmap.Create;
TmpImage:=Tbitmap.Create;
TmpImage.Width := bmpFrom.Width;
TmpImage.Height := bmpFrom.Height;
IRect := Rect(0, 0, bmpFrom.Width, bmpFrom.Height);
TmpImage.Canvas.Brush.Color := clBtnFace;
try
with MonoBmp do
begin
Assign(bmpFrom);
Canvas.Brush.Color := clBlack;
if Monochrome then
begin
Canvas.Font.Color := clWhite;
Monochrome := False;
Canvas.Brush.Color := clWhite;
end;
Monochrome := True;
end;
with TmpImage.Canvas do
begin
Brush.Color := clBtnFace;
FillRect(IRect);
Brush.Color := clBlack;
Font.Color := clWhite;
CopyMode := MergePaint;
Draw(IRect.Left + 1, IRect.Top + 1, MonoBmp);
CopyMode := SrcAnd;
Draw(IRect.Left, IRect.Top, MonoBmp);
Brush.Color := clBtnShadow;
Font.Color := clBlack;
CopyMode := SrcPaint;
Draw(IRect.Left, IRect.Top, MonoBmp);
CopyMode := SrcCopy;
bmpTo.assign(TmpImage);
TmpImage.free;
end;
finally
MonoBmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aaa(image1.picture.bitmap,image2.picture.bitmap);
Image2.invalidate;
end;
Ïèñàë ýòî íå ÿ. Ýòî íàïèñàë ñàì Áîðëàíä (íåêóçÿâíî áûëî áû âçãëÿíóòü íà êëàññ TButtonGlyph. Êàê ðàç èç íåãî ÿ ýòî è âûäåðíóë).Hó à åñëè óæå ñîâñåì õîðîøî ðàçîáðàòüñÿ, òî ìîæíî çàìåòèòü ôóíêöèþ ImageList_DrawEx, â êîòîðîé ìîæíî íà 25 è 50 ïðîöåíòîâ óìåíüøèòü ÿðêîñòü (íî âèçóàëüíî ýòî î÷åíü ïëîõî âîñïðèíèìàåòñÿ). Ñîîòâåòñòâåííî ïàðàìåòðû ILD_BLEND25, ILD_BLEND50, ILD_BLEND-A-MED. Åñòåñòâåííî, ÷òî ïîñëåäíèé àáçàö ðàáîòàåò òîëüêî ñ òðîéêîé.
Denis Tanayeff
denis@demo.ruÝòî êóñî÷åê èç ðàáî÷åé ïðîãè íà Ñè, Âðîäå âñå ëèøíåå ÿ óáðàë.
#define CO_GRAY 0x00C0C0C0L
hMemDC = CreateCompatibleDC(hDC);
hOldBitmap = SelectObject(hMemDC, hBits);
// hBits ýòî ñîáñòâåííî
êàðòèíêà, êîòîðóþ íàäî
"çàñåðèòü"
GetObject(hBits, sizeof(Bitmap), (LPSTR) &Bitmap);
if ( GetState(BS_DISABLED) ) // Blt disabled
{
hOldBrush = SelectObject(hDC, CreateSolidBrush(CO_GRAY));//CO_GRAY
PatBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth,
Bitmap.bmHeight, PATCOPY);
DeleteObject(SelectObject(hDC, hOldBrush));
lbLogBrush.lbStyle = BS_PATTERN;
lbLogBrush.lbHatch =(int)LoadBitmap(hInsts,
MAKEINTRESOURCE(BT_DISABLEBITS));
hOldBrush = SelectObject(hDC,
CreateBrushIndirect(&lbLogBrush));
BitBlt(hDC, BD_BORDERWIDTH, BD_BORDERWIDTH, Bitmap.bmWidth,
Bitmap.bmHeight, hMemDC, 0, 0, 0x00A803A9UL); //
DPSoa
DeleteObject(SelectObject(hDC, hOldBrush));
DeleteObject((HGDIOBJ)lbLogBrush.lbHatch);
}
Andy Nikishin
http://www.gs.ru/~links/andy.shtml (2:5031/16.2)