Pomoc w przerobieniu na scanline

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

Pomoc w przerobieniu na scanline

Nowy postprzez Corvis » czwartek, 17 czerwca 2010, 12:26

Witam,

Może mi ktoś pomóć przerobić funkcje obracania obrazka na metodę scanline ?? Próbowałem to robić według porad cyfrowegobarona ale nie działa mi to.

Przesyłam kod obracania za pomocą pixels:

Kod: Zaznacz cały
    // Obracanie o 90 stopni
    Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;
    Graphics::TBitmap *DestBitmap=new Graphics::TBitmap;
    SrcBitmap->Assign(bitmapaa);

    DestBitmap->Width  = SrcBitmap->Height;
    DestBitmap->Height = SrcBitmap->Width;

    for (int x=0;x<SrcBitmap->Width;x++)  {
        for(int y=0;y<SrcBitmap->Height;y++) {
            DestBitmap->Canvas->Pixels[y][SrcBitmap->Width-1-x] = SrcBitmap->Canvas->Pixels[x][y];
        } 
    }

    bitmapaa->Assign(DestBitmap);

    delete DestBitmap;
    delete SrcBitmap; 
   
    PaintBox1->Refresh();


Kod: Zaznacz cały
    // Obracanie o 180 stopni
    Graphics::TBitmap *SrcBitmap=new Graphics::TBitmap;
    Graphics::TBitmap *DestBitmap=new Graphics::TBitmap;

    SrcBitmap->Assign(bitmapaa);

    DestBitmap->Width  = SrcBitmap->Width;
    DestBitmap->Height = SrcBitmap->Height;


    for (int x=0;x<SrcBitmap->Width;x++) {
        for(int y=0;y<SrcBitmap->Height;y++) {
            DestBitmap->Canvas->Pixels[x][SrcBitmap->Height-1-y] = SrcBitmap->Canvas->Pixels[x][y];
        }
    }

    bitmapaa->Assign(DestBitmap);

    delete DestBitmap;
    delete SrcBitmap; 
   
    PaintBox1->Refresh();



Z góry dzięki i pozdrawiam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 12:39

A dlaczego porada z serwisu Cyfrowy Baron nie działa? Co konkretnie tam nie działa?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Corvis » czwartek, 17 czerwca 2010, 12:50

Tzn, źle to chyba napisałem.

http://cyfbar.republika.pl/grafika.html#graf23 - Tej nie mogę odpalić bo nie mam tej biblioteki stlexam.h

A Według tej http://cyfbar.republika.pl/grafika.html#graf9

próbowałem moje obracanie przerobić na scanline i mi to nie wyszło jakoś.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 13:36

Rotacja (obracanie) bitmapy z wykorzystaniem DIB - działa, ale w C++Builder 2010 trzeba wprowadzić pewne zmiany. Biblioteka stlexam.h nie występuje w tym środowisku, ale można poradzić sobie i bez niej.

pełen kod źródłowy Unit1.cpp:
Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <math.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *SrcBitmap = new Graphics::TBitmap;

Graphics::TBitmap *DestBitmap = new Graphics::TBitmap;
SrcBitmap->Assign(Image1->Picture->Bitmap);   // wczytanie bitmapy z obiektu Image
DestBitmap->PixelFormat = SrcBitmap->PixelFormat;

int angle = 45; //przykładowy kąt 45°
//konwersja stopni na radiany
float radians = (2 * 3.1416 * angle)/360;

float cosine = (float)cos(radians);
float sine   = (float)sin(radians);

float Point1x = (-SrcBitmap->Height * sine);
float Point1y = (SrcBitmap->Height  * cosine);
float Point2x = (SrcBitmap->Width   * cosine - SrcBitmap->Height * sine);
float Point2y = (SrcBitmap->Height  * cosine + SrcBitmap->Width  * sine);
float Point3x = (SrcBitmap->Width   * cosine);
float Point3y = (SrcBitmap->Width   * sine);

float minx = min(0, min(Point1x, min(Point2x, Point3x)));
float miny = min(0, min(Point1y, min(Point2y, Point3y)));
float maxx = max(0, max(Point1x, max(Point2x, Point3x)));
float maxy = max(0, max(Point1y, max(Point2y, Point3y)));

int DestBitmapWidth  = (int)ceil(maxx - minx);
int DestBitmapHeight = (int)ceil(maxy - miny);

DestBitmap->Height = DestBitmapHeight;
DestBitmap->Width  = DestBitmapWidth;

//tworzenie DIB dla SrcBitmap

LPBITMAPINFO srcBmpi = (LPBITMAPINFO)new char[sizeof(BITMAPINFO)];
ZeroMemory(srcBmpi, sizeof(BITMAPINFO));

srcBmpi->bmiHeader.biSize   = sizeof(BITMAPINFOHEADER);
srcBmpi->bmiHeader.biWidth  = SrcBitmap->Width;
srcBmpi->bmiHeader.biHeight = SrcBitmap->Height;
srcBmpi->bmiHeader.biPlanes = 1;
srcBmpi->bmiHeader.biCompression = BI_RGB;

switch(SrcBitmap->PixelFormat)
{
  case pf24bit: srcBmpi->bmiHeader.biBitCount=24; break;
  case pf32bit: srcBmpi->bmiHeader.biBitCount=32; break;
}

int SrcNumberOfBytesPerRow =
((((SrcBitmap->Width * srcBmpi->bmiHeader.biBitCount) + 31)&~31)/8);

HDC ScreenDC = GetDC(NULL);

//gpobranie rozmiaru obrazu
GetDIBits(ScreenDC, SrcBitmap->Handle, 0, srcBmpi->bmiHeader.biHeight,
NULL, srcBmpi, DIB_RGB_COLORS);

if(srcBmpi->bmiHeader.biSizeImage == 0)
{
  srcBmpi->bmiHeader.biSizeImage =
  SrcNumberOfBytesPerRow * SrcBitmap->Height;
}

char* srcbits = new char[srcBmpi->bmiHeader.biSizeImage];

GetDIBits(ScreenDC, SrcBitmap->Handle, 0, srcBmpi->bmiHeader.biHeight,
srcbits, srcBmpi, DIB_RGB_COLORS);

LPBITMAPINFO destBmpi = (LPBITMAPINFO)new char[sizeof(BITMAPINFO)];
ZeroMemory(destBmpi, sizeof(BITMAPINFO));

destBmpi->bmiHeader.biSize   = sizeof(BITMAPINFOHEADER);
destBmpi->bmiHeader.biWidth  = DestBitmap->Width;
destBmpi->bmiHeader.biHeight = DestBitmap->Height;
destBmpi->bmiHeader.biPlanes = 1;
destBmpi->bmiHeader.biCompression = BI_RGB;
destBmpi->bmiHeader.biBitCount = srcBmpi->bmiHeader.biBitCount;

int DestNumberOfBytesPerRow =
((((DestBitmap->Width * destBmpi->bmiHeader.biBitCount) + 31)&~31)/8);

GetDIBits(ScreenDC, DestBitmap->Handle, 0, destBmpi->bmiHeader.biHeight,
NULL, destBmpi, DIB_RGB_COLORS);

if(destBmpi->bmiHeader.biSizeImage == 0)
{
  destBmpi->bmiHeader.biSizeImage =
  DestNumberOfBytesPerRow * DestBitmap->Height;
}

char* destbits = new char[destBmpi->bmiHeader.biSizeImage];

for(int y = 0; y < DestBitmapHeight; y++)
{
  for(int x = 0; x < DestBitmapWidth; x++)
  {
   int SrcBitmapx  = (int)((x + minx) * cosine + (y + miny) * sine);
   int SrcBitmapy  = (int)((y + miny) * cosine - (x + minx) * sine);
   if(SrcBitmapx >= 0 && SrcBitmapx < SrcBitmap->Width && SrcBitmapy >= 0 &&
      SrcBitmapy<SrcBitmap->Height)
   {
    for(int i = 0; i < srcBmpi->bmiHeader.biBitCount / 8; i++)
    {
     *(destbits+(DestNumberOfBytesPerRow*y) +
     (x*srcBmpi->bmiHeader.biBitCount/8+i)) =
     *(srcbits+(SrcNumberOfBytesPerRow*SrcBitmapy) +
     (SrcBitmapx*srcBmpi->bmiHeader.biBitCount / 8 + i));
    }
   }
  }
}

SetDIBits(ScreenDC,DestBitmap->Handle, 0,
destBmpi->bmiHeader.biHeight, destbits, destBmpi, DIB_RGB_COLORS);
Image1->Picture->Bitmap = DestBitmap;

delete DestBitmap;
delete SrcBitmap;
delete []srcbits;
delete []destbits;
}
//---------------------------------------------------------------------------


Pamiętaj o tych elementach:

Kod: Zaznacz cały
#include <math.h>
#ifndef max
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
 


To szybsza metoda od ScanLine, a jeżeli potrzebujesz robić to jeszcze szybciej to powinieneś skorzystać z GDI+.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez polymorphism » czwartek, 17 czerwca 2010, 13:53

GDI+ nie jest konieczne, żeby obrócić bitmapę, wystarczy stare GDI z ustawioną odpowiednio transformacją (SetWorldTransform).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 13:54

A coś więcej, na temat SetWorldTransform, gdyż pierwszy raz o tym słyszę.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez polymorphism » czwartek, 17 czerwca 2010, 14:07

C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Cyfrowy Baron » czwartek, 17 czerwca 2010, 14:32

Znalazłem przykład w pliku pomocy:

Kod: Zaznacz cały
void TransformAndDraw(int iTransform, HWND hWnd)
{
    HDC hDC;
    XFORM xForm;
    RECT rect;

    // Retrieve a DC handle for the application's window.

    hDC = GetDC(hWnd);

    // Set the mapping mode to LOENGLISH. This moves the
    // client area origin from the upper left corner of the
    // window to the lower left corner (this also reorients
    // the y-axis so that drawing operations occur in a true
    // Cartesian space). It guarantees portability so that
    // the object drawn retains its dimensions on any display.

    SetGraphicsMode(hDC, GM_ADVANCED);
    SetMapMode(hDC, MM_LOENGLISH);

    // Set the appropriate world transformation (based on the
    // user's menu selection).

    switch (iTransform)
    {
        case SCALE:        // Scale to 1/2 of the original size.
            xForm.eM11 = (FLOAT) 0.5;
            xForm.eM12 = (FLOAT) 0.0;
            xForm.eM21 = (FLOAT) 0.0;
            xForm.eM22 = (FLOAT) 0.5;
            xForm.eDx  = (FLOAT) 0.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

        case TRANSLATE:   // Translate right by 3/4 inch.
            xForm.eM11 = (FLOAT) 1.0;
            xForm.eM12 = (FLOAT) 0.0;
            xForm.eM21 = (FLOAT) 0.0;
            xForm.eM22 = (FLOAT) 1.0;
            xForm.eDx  = (FLOAT) 75.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

        case ROTATE:      // Rotate 30 degrees counterclockwise.
            xForm.eM11 = (FLOAT) 0.8660;
            xForm.eM12 = (FLOAT) 0.5000;
            xForm.eM21 = (FLOAT) -0.5000;
            xForm.eM22 = (FLOAT) 0.8660;
            xForm.eDx  = (FLOAT) 0.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

        case SHEAR:       // Shear along the x-axis with a
                          // proportionality constant of 1.0.
            xForm.eM11 = (FLOAT) 1.0;
            xForm.eM12 = (FLOAT) 1.0;
            xForm.eM21 = (FLOAT) 0.0;
            xForm.eM22 = (FLOAT) 1.0;
            xForm.eDx  = (FLOAT) 0.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

        case REFLECT:     // Reflect about a horizontal axis.
            xForm.eM11 = (FLOAT) 1.0;
            xForm.eM12 = (FLOAT) 0.0;
            xForm.eM21 = (FLOAT) 0.0;
            xForm.eM22 = (FLOAT) -1.0;
            xForm.eDx  = (FLOAT) 0.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

        case NORMAL:      // Set the unity transformation.
            xForm.eM11 = (FLOAT) 1.0;
            xForm.eM12 = (FLOAT) 0.0;
            xForm.eM21 = (FLOAT) 0.0;
            xForm.eM22 = (FLOAT) 1.0;
            xForm.eDx  = (FLOAT) 0.0;
            xForm.eDy  = (FLOAT) 0.0;
            SetWorldTransform(hDC, &xForm);
            break;

    }

    // Find the midpoint of the client area.

    GetClientRect(hWnd, (LPRECT) &rect);
    DPtoLP(hDC, (LPPOINT) &rect, 2);

    // Select a hollow brush.

    SelectObject(hDC, GetStockObject(HOLLOW_BRUSH));

    // Draw the exterior circle.

    Ellipse(hDC, (rect.right / 2 - 100), (rect.bottom / 2 + 100),
        (rect.right / 2 + 100), (rect.bottom / 2 - 100));

    // Draw the interior circle.

    Ellipse(hDC, (rect.right / 2 -94), (rect.bottom / 2 + 94),
        (rect.right / 2 + 94), (rect.bottom / 2 - 94));

    // Draw the key.

    Rectangle(hDC, (rect.right / 2 - 13), (rect.bottom / 2 + 113),
        (rect.right / 2 + 13), (rect.bottom / 2 + 50));
    Rectangle(hDC, (rect.right / 2 - 13), (rect.bottom / 2 + 96),
        (rect.right / 2 + 13), (rect.bottom / 2 + 50));

    // Draw the horizontal lines.

    MoveToEx(hDC, (rect.right/2 - 150), (rect.bottom / 2 + 0), NULL);
    LineTo(hDC, (rect.right / 2 - 16), (rect.bottom / 2 + 0));

    MoveToEx(hDC, (rect.right / 2 - 13), (rect.bottom / 2 + 0), NULL);
    LineTo(hDC, (rect.right / 2 + 13), (rect.bottom / 2 + 0));

    MoveToEx(hDC, (rect.right / 2 + 16), (rect.bottom / 2 + 0), NULL);
    LineTo(hDC, (rect.right / 2 + 150), (rect.bottom / 2 + 0));

    // Draw the vertical lines.

    MoveToEx(hDC, (rect.right/2 + 0), (rect.bottom / 2 - 150), NULL);
    LineTo(hDC, (rect.right / 2 + 0), (rect.bottom / 2 - 16));

    MoveToEx(hDC, (rect.right / 2 + 0), (rect.bottom / 2 - 13), NULL);
    LineTo(hDC, (rect.right / 2 + 0), (rect.bottom / 2 + 13));

    MoveToEx(hDC, (rect.right / 2 + 0), (rect.bottom / 2 + 16), NULL);
    LineTo(hDC, (rect.right / 2 + 0), (rect.bottom / 2 + 150));

    ReleaseDC(hWnd, hDC);
}

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Corvis
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Corvis » wtorek, 22 czerwca 2010, 08:14

Baronie,

Rotacja (obracanie) bitmapy z wykorzystaniem DIB

Owszem działa, ale znalazłem tam błąd. Mianowicie, Po kilku obrotach robi się ramka w koło obrazu. W załączniku przesyłam 3 pliki

1 - po 1 obrocie
2 - po 2 obrocie
3 - po 20 obrotach


Szukam błędu, ale nie mogę go namierzyć narazie.

Pozdrawiam,
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Cyfrowy Baron » wtorek, 22 czerwca 2010, 11:22

Mi nie chce się ślęczeć nad tym kodem. Nie tyle jest błąd w kodzie ile nie działa on z Twoimi założeniami. Założeniem tego kodu było obrócenie jednokrotne bitmapy. Przy kolejnych obrotach, trzeba by skopiować obróconą bitmapę, przepisać, ponownie ustalić nowy rozmiar i ponownie obrócić. Problemem jest obiekt Image, na którym wyświetlasz grafikę. Ustaw mu właściwość Transparent na true a problem częściowo zniknie. Obracany obiekt jest przetwarzany w prosty sposób dlatego nie stosuje się tutaj efektu rozmycia i wygładzania krawędzi, dlatego przy każdym kolejnym obrocie już obróconego obrazka powstają artefakty.
Chcąc wyeliminować ten problem powinieneś zawsze obracać obrazek bazowy, czyli taki, który obracany nie był. Przecież jeżeli obracasz np. obraz 20 razy i po dwudziestym razie kąt obrotu wyniesie np. 360º, to oznacza, że za każdym razem obracałeś go o 18 stopni. Stosuj więc zasadę, że za pierwszym razem obracasz obraz o 18º, za drugim o (18*2)º, za trzecim o (18*3)º, za czwartym o (18*4)º itd. ale za każdym razem obracaj grafikę bazową, a nie już obróconą.

Lepsze efekty i znacznie prościej, i szybciej jest obracać grafikę z wykorzystaniem GDI+, a kod jest o wiele prostszy w zastosowaniu od standardowego GDI i klasy TCanvas, że nie wspomnę o stosowaniu DIB.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Pomoc w przerobieniu na scanline

Nowy postprzez Corvis » wtorek, 22 czerwca 2010, 11:25

Właśnie przeżuciłem się na GDI :) Obracanie jest banalne.

Dzięki.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaSafari


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości

cron