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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
15-1153143313
Separator
2006-07-17 17:35
2006.08.13
Текстовый редактор с подсветкой синтаксиса


15-1152707829
harisma
2006-07-12 16:37
2006.08.13
Вордовский файл.


15-1153404776
Гарри Поттер
2006-07-20 18:12
2006.08.13
Чего все ополчились против Израиля?


2-1153839112
WolfRamm
2006-07-25 18:51
2006.08.13
Zeos


3-1149653396
apl
2006-06-07 08:09
2006.08.13
Как посдсчитать кол-во записей





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