Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: miniaturki
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004
miniaturki

robie program do robienia galerii internetowych i nie wiem jak zrobić miniaturki.

próbowąłem cos z api wykąbinowac ale mi nie wychodzi. pomóżcie!!

[Post edytowany dnia 30-07-2004 18:13 przez iggi]

30-07-2004 18:12
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Użyj funkcji StretchBlt.

Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-07-2004 19:19
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004

ok tak patrze własnie na funkce i myśle że sobie poradze a jak później zapisać obraz na dysku??

powiedzmy że robie to na podstawie 2 pictureboxów.
i do jednego wgrywam grafike pózniej ją zmniejszam i teraz w jaki sposób zapisac ją zapisac na dysku??

30-07-2004 19:23
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Ustaw rozmiar drugiego pictureboxa na końcowy rozmiar, ustaw mu AutoRedraw na true i BorderStyle na 0, po funkcji strechblt wywołaj refresh tego pictureboxa. Teraz zapis:

SavePicture "Cic.bmp",Picture2.Image

[Post edytowany dnia 30-07-2004 19:33 przez bisiek]


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-07-2004 19:32
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004

wielki dzienks

30-07-2004 19:33
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Sorry, pisze z pamięci i pomyliłem kolejność parametrów. Miało być

SavePicture Picture2.Image, "C:\Pic.bmp"


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-07-2004 20:13
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004

cos próbuje ale mi nie wychodzi, boglbys mi napisac ja ma wygladac funkcja??

docelowy rozmiar to 95 width i 87 height

picturebox docelowy do celP a zrodlowy to sourceP

wymiary wczytywanego obrazku nie sa znane ale zrodlowy box sie dopasowyuje do obrazka i z niego mozna pobrac wymiary

30-07-2004 20:30
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Jeżeli celP ma już ustawione potrzebne wymiary to nie ma problemu. Jeżeli nie

celP.Width = 95
celP.Height = 87


Ustaw wartości ręcznie lub przy stracie (form_load) wpisz

celP.AutoRedraw = True
cleP.BorderStyle = 0

Zapis


'Wpisz funkcję api
celP.refresh

SavePicture celP.Image, "C:\Plik.bmp"


Ale opisz dokładnie w czym masz problem


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-07-2004 20:39
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004

znalazlem blad ale i tak mi nie wyswietla


napisz jak miaBaby bygldac funkcja pliz

30-07-2004 20:54
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Const ScrCopy = &HCC0020
Dim i As Long

Private Sub Zmniejsz()

w = sourceP.Width
h = sourceP.Height
StretchBlt celP.hdc, 0, 0, 95, 87, sourceP.hdc, 0, 0, w, h, ScrCopy

celP.Refresh
i = i + 1
SavePicture celP.Image, "C:\plik" & i & ".bmp"

End Sub

Private Sub Form_Load()
sourceP.ScaleMode = 3
sourceP.BorderStyle = 0

Me.ScaleMode = 3
With celP
.ScaleMode = 3
.AutoRedraw = True
.BorderStyle = 0
.Width = 95
.Height = 87
End With

End Sub

[Post edytowany dnia 30-07-2004 21:14 przez bisiek]


_____________________________________________
www.mob.abc.pl - moja strona o VB

30-07-2004 21:04
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
iggi




Typ: neutral
Postów: 7
Zarejestrowany: Jul 2004

sory ze dopiero teraz ale nie bylo mnie w domu.

niby dziala ale jakos tak dziwnie poniewaz nie zmniejsza mi tego obrazu dobrze. Robi tak jakby printscreen i jefgo zmniejsza. kiedy zapisuje do pliku jest zmniejszony obraz. ja bede nadal próbowac i jak narazie wielkie dzieki ale jakbys mogl to wez cos jeszcze zobacz.

dzienks

31-07-2004 18:38
Pokaż profil iggi  Wyślij email do iggi        2077194
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

To musiałbyś popróbować ze skalą, żeby zmniejszał proporcjonalnie wysokość i szerokość. To popwinno byś mniej więcej coś takiego:

nowe_h = h / w * nowe_w


_____________________________________________
www.mob.abc.pl - moja strona o VB

31-07-2004 18:49
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

Chyba wiem w czym Iggi ma problem. Też się tym kiedyś bawiłem i efekt był podobny tzn: po zastosowaniu funkcji StretchBlt (do zmniejszania) wynikiem byl pomniejszony cały kawałek ekranu a nie tylko źródłowy obrazek.

Rozwiązaniem problemu jest umieszczenie źródłowego obrazka tak aby był cały widoczny na ekranie - niczym nie był przesłonięty. Np nie da sie zastosować tej funkcji tak aby obrazki nie były wogóle pokazywane użytkownikowi. Przynajmniej ja nie wiem jak to zrobić Jeżeli ma ktoś pomysł jak to wykonać to był bym wdzięczny za podopowiedź.


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

11-08-2004 01:44
Pokaż profil m-a-x  Wyślij email do m-a-x   
m-a-x



Typ: neutral
Postów: 366
Zarejestrowany: Jan 2003

iggi: jeżeli Twoj programik służy np do tworzenia miniaturek na strone www proponuje ustawić jakąś stałą wysokość sourceP i do sourceP wsadzić ImageBox'a a następnie:

Image1.Stretch = False
Image1.Picture = LoadPicture(sciezka_do_pliku)
Image1.Stretch = True
Image1.Width = Fix((sourceP.Height / Image1.Height) * Image1.Width)
Image1.Height = sourceP.Height
sourceP.Width = Image1.Width
sourceP.Refresh

celP.Width = sourceP.Width
celP.Height = sourceP.Height

Call Zmniejsz


Pamiętaj żeby sourceP był widoczny


_____________________________________________

Problemem zazwyczaj nie jest brak osób znających odpowiedź a zadanie właściwego pytania!

11-08-2004 02:10
Pokaż profil m-a-x  Wyślij email do m-a-x   
Wszystkich odpowiedzi: 13 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1