Àêæàí â ñåòè - Íà óðîâåíü ââåðõ(API) Êàê ñîçäàòü disable'íûé áèòìàï èç îáû÷íîãî (emboss etc)?

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)