Tagi na forum.

Windows 14206 SQL Server 2132
sieci 6796 Windows XP 1921
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

listBox

grad3d 2010-02-09 09:37:12
0
avatar
 
 
Witam,mam mały program w którym mam listę obrazów w listbox i za pomocą  SelectedIndexChanged rysuje sobie przeskalowany obraz na panelu. I problem polega na tym że, gdy usuwam dany obraz z listy znika mi cała lista na chwile. Gdy usuwam obraz z listy robie coś takiego że usuwam sobie zaznaczony index listBox.Items.Remove(listBox.SelectedItem);,  pózniej zaznaczam sobie inny index za pomocą listBox.SelectedIndex = c; i wedy rysuje mi sie inny obraz na panelu. Wczystko ładnie działa tylko znika mi ta lista i to mnie troche denerwuje. Gdy usune funkcjie która mi rysuje obraz wszystko chodzi idealnie ale jak jest to mi znika. Myśle że tak się dzieje bo wczytuje obraz z dysku do bitmapy ale nie jestem pewnien. Może jest jakieś rozwiązanie tego problemu?pozdrawaimDamian


bomba504  2010-02-09 11:08:48 #1
0
avatar
 
 
zapodaj kod funkcji, którą rysujesz obraz na panelu

grad3d  2010-02-09 12:32:59 #1.1
0
avatar
 
 
Mam cos takiego:



[Kod]
using (Graphics g = panel1.CreateGraphics())
{
Bitmap bmp = new Bitmap(fname);

// skala wyswietlania obrazu na panelu bez zniekształceń
SizeF RozmiarObrazu = new SizeF(bmp.Width, bmp.Height);
float skala = Math.Min(panel1.Width / RozmiarObrazu.Width, panel1.Height / RozmiarObrazu.Height);
skalaP = skala;
RozmiarObrazu.Width *= skala;
RozmiarObrazu.Height *= skala;

// wyswietlenie obrazu
g.DrawImage(bmp, 0, 0, RozmiarObrazu.Width, RozmiarObrazu.Height); }




bomba504  2010-02-09 15:43:28 #1.1.1
0
avatar
 
 
zapodaj cały kod programu i czy listBox znajduje sie na panelu czy w innym miejscu na formie, napisałem sobie taką mini przeglądarkę obrazów korzystając z twojej funkcji wyświetlania i przy usuwaniu elementów z listy lista mi nie znika, rozumie że lista znika wogóle  po usunięciu elementu czy jest to chwilowe zniknięcie

Edytowano 1 raz. Ostatnio 2010-02-09 15:44:26 przez bomba504.
grad3d  2010-02-09 17:36:00 #1.1.1.1
0
avatar
 
 
Lista mi znika tylko na chwile, gdy sie obraz narysuje na panelu to mi sie pojawia spowrotem.
A listbox znajduje się poza panelem na którym rysuje zdjęcie.
W funkcji wyświetlania zdjęć mam jeszcze dodawanie tekstu lub grafiki jako znaku wodnego ale bez tego też się pojawia problem.
Mam jeszcze pytanie jak mogę sobie poprawić jakość rysowanych obrazów na panelu? Bo skaluje sobie obrazy żeby sie zmnieścił na panelu ale troche jakość nie jest dobra.
 
A oto cały kod:



[Kod]
// wybranie fotki w listBoxsie
private void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox.Items.Count == 0)
{
return;
}
else
{
if (listBox.SelectedIndex != -1)
{
panel1.BackColor = Color.Transparent;
string fname = listBox.SelectedItem.ToString();
wyswietlenieFotki(fname);
}
}
}


// wyswietla fotki
public void wyswietlenieFotki(string liczba)
{

using (Graphics g = panel1.CreateGraphics())
{
Bitmap bmp = new Bitmap(fname);

// skala wyswietlania obrazu na panelu bez zniekształceń
SizeF RozmiarObrazu = new SizeF(bmp.Width, bmp.Height);
float skala = Math.Min(panel1.Width / RozmiarObrazu.Width, panel1.Height / RozmiarObrazu.Height);
skalaP = skala;
RozmiarObrazu.Width *= skala;
RozmiarObrazu.Height *= skala;


// wyswietlenie obrazu
g.DrawImage(bmp, 0, 0, RozmiarObrazu.Width, RozmiarObrazu.Height);

// rysowanie podpisu tekst if (textBox_Tekst.Text != "" && radioButton_Tekstowy.Checked == true)
{
Brush myBrush = new SolidBrush(Color.FromArgb(opac, kolor_Tekstu));
SizeF sz = g.MeasureString(textBox_Tekst.Text, myFont);
g.DrawString(textBox_Tekst.Text, myFont, myBrush, new Point(X, Y));
}

//rysowanie loga if (textBox_Tekst.Text != "" && radioButton_Graficzny.Checked == true)
{
Bitmap TGhost = new Bitmap(logo.Width, logo.Height);
Graphics transGraphics = Graphics.FromImage(TGhost);
ColorMatrix tranMatrix = new ColorMatrix();
tranMatrix.Matrix33 = (float)Przezro;

ImageAttributes transparentAtt = new ImageAttributes();
transparentAtt.SetColorMatrix(tranMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
transGraphics.DrawImage(logo, new Rectangle(0, 0, TGhost.Width, TGhost.Height), 0, 0, TGhost.Width, TGhost.Height, GraphicsUnit.Pixel, transparentAtt);
transGraphics.Dispose();

g.DrawImage(TGhost, Y, X);
}
}
}


// usuwanie zaznaczonej fotki
private void button_Usun_Click(object sender, EventArgs e)
{
int c = listBox.SelectedIndex;
if (listBox.SelectedItems.Count > 0)
{

listBox.Items.Remove(listBox.SelectedItem);
}


if (c > 0)
{
stan = 1;
c

Edytowano 1 raz. Ostatnio 2010-02-09 17:37:38 przez grad3d.
bomba504  2010-02-09 19:08:54 #1.1.1.1.1
0
avatar
 
 
co do poprawy jakości spóbuj dodać następujący kod



[Kod]
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality




bomba504  2010-02-09 19:42:12 #1.1.1.1.1.1
0
avatar
 
 
jeśli możesz podeślij mi na maila spakowany projekt to go przejrze dokładnie bo w tym kodzie co podałeś nie widzę problemu

grad3d  2010-02-09 19:59:01 #1.1.1.1.1.1.1
0
avatar
 
 
Kod który mi podałeś poprawił mi jakość na bardzo dobrą nie wiedziałem że to tak proste bedzię :)
A program za chwile spakuje i wyśle.

Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony