Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.13;
Скачать: CL | DM;

Вниз

Работа с растровыми изображениями   Найти похожие ветки 

 
SDF   (2006-07-01 09:13) [0]

Вощем, хоть плач уже...
Начальные данные.
TStringGrid два TBitmap Один из них является фоном.
Нужно в ячейку грида нариовать следующее.
Один tBitmap положить как есть, второй, траспарентно наложить на первый.
Как пример. В одном TBitmap находится картинка, лужайки к примеру. НА втором -нарисован дом.
Результат - дом стоит на лужайке.
Спасибо!


 
EvS ©   (2006-07-01 10:49) [1]

>Спасибо!
Пожалуйста.
Суть ясна.Неясно в чем проблема


 
SDF   (2006-07-01 10:56) [2]

Проблема в том, что не получается  у меня.
достиг двух вариантов.
1) Все хорошо, но верняя картинка как бы принимает цвет подложки (дом становится цветом лужайки)
2) Вся ячейка светится всеми цветами радуги где едва можно понять то, что должнобыть там нарисовано
Жду подсказки, а луше ПРОВЕРЕННОГО кода.
Спасибо.


 
Мефисто   (2006-07-01 12:08) [3]

Для начала ждем вашего кода для возможной правки ошибок :)


 
Жуков Олег   (2006-07-01 14:03) [4]

Есть работающий пример, но на WinApi и с использованием маски. В маске прозрачные области - белые, непрозрачные - чёрные.
function TUniverseObject.TryDrawBitmap(const DC: HDC; const CenterX, CenterY: Extended): Boolean;
var
 BitmapDC: HDC;
 SavedStretchBltMode : Integer;
 BitmapInfo: BITMAP;
 MaskBitmapDC: HDC;
begin
   Result := False;
   if FBitmap <> 0 then
   begin
     BitmapDC := CreateCompatibleDC(DC);
     try
       SelectObject(BitmapDC, FBitmap);
       SavedStretchBltMode := SetStretchBltMode(DC, HALFTONE);
       try

         GetObject(FBitmap, SizeOf(BITMAP), @BitmapInfo);

         if FMaskBitmap <> 0 then
         begin
           MaskBitmapDC := CreateCompatibleDC(DC);
           try
             SelectObject(MaskBitmapDC, FMaskBitmap);
             StretchBlt(
               DC,
               Round(CenterX - FRadius),
               Round(CenterY - FRadius),
               Round(FRadius + FRadius),
               Round(FRadius + FRadius),
               MaskBitmapDC,
               0,
               0,
               BitmapInfo.bmWidth,
               BitmapInfo.bmHeight,
               SRCAND
               );
           finally
             DeleteDC(MaskBitmapDC);
           end;
           StretchBlt(
             DC,
             Round(CenterX - FRadius),
             Round(CenterY - FRadius),
             Round(FRadius + FRadius),
             Round(FRadius + FRadius),
             BitmapDC,
             0,
             0,
             BitmapInfo.bmWidth,
             BitmapInfo.bmHeight,
             SRCINVERT
             );

         end else
           // FMaskBitmap = 0
           StretchBlt(
             DC,
             Round(GetLeft()),
             Round(GetTop()),
             Round(FWidth),
             Round(FHeight),
             BitmapDC,
             0,
             0,
             BitmapInfo.bmWidth,
             BitmapInfo.bmHeight,
             SRCCOPY// GetPixel(BitmapDC, 1, 1)
             );
       finally
         SetStretchBltMode(DC, SavedStretchBltMode);
       end;
       Result := True;
     finally
       DeleteDC(BitmapDC);
     end;
   end // if FBitmap <> 0 then

end;


 
SDF   (2006-07-02 07:09) [5]

Весм спасибо. Разобрался, верне помогли.
Function GetSlide(Dest, Source : TBitMap): TBitMap;
begin
  Result:=TBitMap.Create;
  If Assigned(Source)
     then begin
           Result.Width := Dest.Width;
           Result.Height := Dest.Height;
           Source.TransParentColor:=Source.Canvas.Pixels[Source.Width-1,Source.Height-1];
           Source.Transparent:=true;
           Source.TransparentMode := tmAuto;
           Result.Canvas.Draw(0,0,Dest);
           Result.Canvas.Draw(0,0,Source);
          end
     else Result.Assign(Dest);
end;
Ну и потом в грид. Моя ошиба заключалась в том, что я понадеялся на грид, а он, кстати, что и TDrawGrid, такие комбинации -делать не умеет.
как итог -клей все что надо снаружи, а уже потом суй в грид.
Вот так вот.



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

Текущий архив: 2006.08.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.06 c
2-1153895423
Константин_
2006-07-26 10:30
2006.08.13
Выборка определенного количества символов в SQL запросе


1-1151609039
NewCheloveck555
2006-06-29 23:23
2006.08.13
Проблема нахождения элемента через FindWindowEx


2-1153806323
VitV
2006-07-25 09:45
2006.08.13
Поиск в блоб.


2-1153863830
SerJaNT
2006-07-26 01:43
2006.08.13
Hex


6-1143528314
balepa
2006-03-28 10:45
2006.08.13
Процедура обработки OnClientRead