Problem z przeźroczystością TImage

0

Cześć, problem niby banalny, ale wg mnie TImage zachowuje się dziwnie, a i w necie nie znalazłem niczego, co by pomogło.

Otóż ładuję plik(jpg) w taki sposób:

var
  img: TImage;
begin
  img:=TImage.Create(MainScrollBox);
  img.Parent:=MainScrollBox;

  img.Picture.Assign(graphic); //graphic zawiera odpowiedni obraz
  img.Proportional:=true;

  img.Visible:=true;
  img.Transparent:=true;
end;

Niestety za cholerę obrazek nie chce być przeźroczysty. Próbowałem nawet z img.Picture.Bitmap.Transparent, ale wyskakuje komunikat, że bitmap jest puste. Ktoś miał podobny problem? Jak se z tym poradzić?

0

może pokaż ten "odpowiedni obrazek"

0

Transparent dla TImage działa niestety tylko dla innych TImage.
Czyli jeżeli jeden TImage jest nałożony na inny TImage to działa, jeżeli jest nad przyciskiem to już nie.

0
13th_DRagon napisał(a)

Transparent dla TImage działa niestety tylko dla innych TImage.
Czyli jeżeli jeden TImage jest nałożony na inny TImage to działa, jeżeli jest nad przyciskiem to już nie.

Ale tak też nie chce :|

A odpowiedni obrazek to obrazek z białym tłem (RGB = $FFFFFF) i czarną kropką w środku.

0
_13th_Dragon napisał(a)

Transparent dla TImage działa niestety tylko dla innych TImage.
Czyli jeżeli jeden TImage jest nałożony na inny TImage to działa, jeżeli jest nad przyciskiem to już nie.

aaa.png
pierwszy transparent=true, drugi false

kolorem przeźroczystości jest pixel z lewego górnego rogu

Simple_tux.txt to jest obrazek, który jest w imageach (trzeba zmienić z txt na bmp bo forum nie łyka bmp :/)

0

OK, już wiem. Na JPG nie działa. Ale czemu? Tylko mi nie mówcie, że jpg nie ma zapisanych informacji o przeźroczystości, bo bmp też nie ma.

Przecież Delphi robi przeźroczystość na zasadzie, że kolor dolnego, czy górnego lewego piksela jest kolorem przeźroczystości. Więc jak to zrobić, żeby jpegi też były przeźroczyste?
Wiem, że to kompresja stratna, ale bez przesady. Mają białe tło w bitmapie(RGB = $FFFFFF) i tworząc z tego jpeg w MSPaincie, tło w tym jpegu też jest białe(RGB = $FFFFFF) - sprawdzałem.

0

A czemu nie użyjesz PNG?

1
Juhas napisał(a)

OK, już wiem. Na JPG nie działa.

Nie pisałeś w pierwszym poście co zawiera graphic.
Spróbuj tak

  img.Picture.Bitmap.Assign(graphic); //graphic zawiera odpowiedni obraz
0
pelsta napisał(a)
Juhas napisał(a)

OK, już wiem. Na JPG nie działa.

Nie pisałeś w pierwszym poście co zawiera graphic.
Spróbuj tak

  img.Picture.Bitmap.Assign(graphic); //graphic zawiera odpowiedni obraz

OK, to zadziałało, dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1