Strona: [  << <   1 2   > >>  ]  z  2     
Autor Temat: Kontrolka
irek




Typ: neutral
Postów: 1
Zarejestrowany: Jun 2004
Kontrolka

Szukam darmowej kontrolki typu "ImageEdit" (Kodak - edycja) z możliwością edytowania kontastu, jasności ,kolorów RGB

dzięki


_____________________________________________
Szukam darmowej kontrolki typu "ImageEdit" (Kodak - edycja) z możliwością edytowania kontastu, jasności ,kolorów RGB
dzięki

09-06-2004 10:44
Pokaż profil irek  Wyślij email do irek   
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002

chyba nie ma takich kontrolek, ale widziałem tego typu programy, akurat jak na złość niemogę znaleźć tego co widziałem, ale może te po części zainteresują Ciebie

http://www.coderscity.pl/no-vb4all/workshop/picturemixer.zip
http://www.coderscity.pl/no-vb4all/workshop/colormixer.zip
http://www.coderscity.pl/no-vb4all/workshop/efekty.zip


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

09-06-2004 22:56
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
Knight Lore''FC




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

Mam przyklady w C++ jak to zrobic. Moze znajdzie sie osoba znajaca C++ i potrafiaca zrobic DLL z tego, aby mozna wywolywac procedure z poziomu VB ?

15-06-2004 01:42
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

A mogl bys mi wyslac, bo ja umiem tylko zmienisc kontrast i nasycenie RGB, na rozjasnie to nie znalazem algorytmu

15-06-2004 15:37
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Knight Lore''FC




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

Chcesz te algorytmy w C++ czy w VB ( bo przerobilem je na VB, ale sa bardzo powolne i dla tego szukam chetnego na zrobienie DLL w C++ z obsluga w VB ) ?

16-06-2004 00:17
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003

wyslij oby trzy
tzn wszystkie, jak znajde czas to postaram sie przerobic

16-06-2004 13:42
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Knight Lore''FC




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

/*
  Ten plik źródłowy może byc dowolnie wykorzystywany, pod warunkiem,
  że każda aplikacja zbudowana z jego wykorzystaniem zawierać będzie
  informacje o pochodzeniu niniejszego zestawu funkcji.
  Paweł Brągoszewski, PC World Kompuer 11/2003
*/

#include "fotoretusz.h"
#include "vcl\Math.hpp"
#ifndef sqr
#define sqr(A) (A)*(A)
#endif

//
// Zmiana jasnosci bitmapy bmp o wartosc val
//
int DostosujJasnosc( Graphics::TBitmap *bmp, int val )
{
  int wysokosc, szerokosc;
  int r,g,b;

  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      //pobierz składowe RGB
      b = wiersz[j].rgbBlue;
      g = wiersz[j].rgbGreen;
      r = wiersz[j].rgbRed;

      r += val;
      g += val;
      b += val;

      r = (r>255)?255: (r<0)?0:r;
      b = (b>255)?255: (b<0)?0:b;
      g = (g>255)?255: (g<0)?0:g;

      //przejdz do następnego piksela
      wiersz[j].rgbBlue = (BYTE) b;
      wiersz[j].rgbGreen = (BYTE) g;
      wiersz[j].rgbRed = (BYTE) r;
    }
  }

} //DostosujJasnosc

//
// Zmiana kontrastu bitmapy bmp o wartosc val
//
int DostosujKontrast( Graphics::TBitmap *bmp, int val )
{
  int wysokosc, szerokosc;
  double v = 1.2725*val;

  double v1 = 255/(255-2*v);
  double v2 = (255+2*v)/255;

  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      //pobierz składowe RGB
      int b = wiersz[j].rgbBlue;
      int g = wiersz[j].rgbGreen;
      int r = wiersz[j].rgbRed;

      //zmodyfikuj składowe r,g,b
      if(v>0)
      {
        r = (r<v)?0: (r>255-v)?255:v1*(r-v);
        g = (g<v)?0: (g>255-v)?255:v1*(g-v);
        b = (b<v)?0: (b>255-v)?255:v1*(b-v);
      }
      else if(v<0)
      {
        r = -v+v2*r;
        g = -v+v2*g;
        b = -v+v2*b;
      }

      //sprawdź zakresy
      r = (r>255)?255: (r<0)?0:r;
      b = (b>255)?255: (b<0)?0:b;
      g = (g>255)?255: (g<0)?0:g;

      //przejdz do następnego piksela
      wiersz[j].rgbBlue = (BYTE) b;
      wiersz[j].rgbGreen = (BYTE) g;
      wiersz[j].rgbRed = (BYTE) r;
    }
  }

} //DostosujKontrast


//
// Zmiana nasycenia kolorów o wartosv val
//
int DostosujNasycenie( Graphics::TBitmap *bmp, int val )
{
  int wysokosc, szerokosc;
  double x = 1.0+val/100.0;
  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      //pobierz składowe RGB
      int b = wiersz[j].rgbBlue;
      int g = wiersz[j].rgbGreen;
      int r = wiersz[j].rgbRed;

      int szary = (r+g+b)/3.0;

      r = szary + (r-szary)*x;
      g = szary + (g-szary)*x;
      b = szary + (b-szary)*x;

      r = (r>255)?255: (r<0)?0:r;
      b = (b>255)?255: (b<0)?0:b;
      g = (g>255)?255: (g<0)?0:g;

      //przejdz do następnego piksela
      wiersz[j].rgbBlue = (BYTE) b;
      wiersz[j].rgbGreen = (BYTE) g;
      wiersz[j].rgbRed = (BYTE) r;
    }
  }

} //DostosujNasycenie

// Przygotuj Miniature
// funkcja tworzy miniature z obrazka oryginal, zapisując ją w miniatura
// miniature ma wymiary szerokosc,wysokosc

int PrzygotujMiniature( Graphics::TBitmap *oryginal, Graphics::TBitmap *miniatura,int szerokosc, int wysokosc)
{
TMemoryStream *pms = new TMemoryStream;

if( szerokosc>0 && wysokosc>0 )
{
  pms->Position = 0;
  oryginal->SaveToStream(pms);
  pms->Position = 0;
  miniatura->LoadFromStream( pms );

  double skok_wys = oryginal->Height/(double)wysokosc;
  double skok_szer = oryginal->Width/(double)szerokosc;
  miniatura->Width = szerokosc;
  miniatura->Height = wysokosc;

  int *wiersz_oryginal,*wiersz_min;

  for( int i=0; i<wysokosc; i++)
  {
    wiersz_min = (int *) miniatura->ScanLine;
    wiersz_oryginal = (int *) oryginal->ScanLine[ (int)(i*skok_wys) ];
    for( int j=0; j<szerokosc; j++)
    {
      wiersz_min[j] = wiersz_oryginal[ (int)(j*skok_szer) ];
    }
  }
}

delete pms;
} //PrzygotujMiniature

//
// Zmien balans kolorow wg xr, xg i xb, odpowiednio modyfikujących
// składowe R, G i B
//
int DostosujBalans( Graphics::TBitmap *bmp, int xr, int xg, int xb )
{
  int wysokosc, szerokosc;
  int r,g,b;

  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      //pobierz składowe RGB
      int b = wiersz[j].rgbBlue;
      int g = wiersz[j].rgbGreen;
      int r = wiersz[j].rgbRed;

      r += xr;
      g += xg;
      b += xb;

      r = (r>255)?255: (r<0)?0:r;
      b = (b>255)?255: (b<0)?0:b;
      g = (g>255)?255: (g<0)?0:g;

      //przejdz do następnego piksela
      wiersz[j].rgbBlue = (BYTE) b;
      wiersz[j].rgbGreen = (BYTE) g;
      wiersz[j].rgbRed = (BYTE) r;
    }
  }

} //DostosujBalans

//
// Przeksztalc bitmapę bmp na jej negatyw
//
int Negatyw( Graphics::TBitmap *bmp)
{
  int wysokosc, szerokosc;

  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      // tutaj uzyty jest operator negacji bitowej!
      wiersz[j].rgbBlue = ~wiersz[j].rgbBlue;
      wiersz[j].rgbGreen = ~wiersz[j].rgbGreen;
      wiersz[j].rgbRed = ~wiersz[j].rgbRed;
    }
  }

}//Negatyw

//
// zmien bitmapę bmp na obraz w odcieniach szarosci
//
int OdcienieSzarosci( Graphics::TBitmap *bmp)
{
  int wysokosc, szerokosc;
  int szary;
  wysokosc = bmp->Height;
  szerokosc = bmp->Width;

  for( int i=0; i<wysokosc; i++ )
  {
    RGBQUAD *wiersz = (RGBQUAD *) bmp->ScanLine;
    for( int j=0; j<szerokosc; j++ )
    {
      // oblicz poziom szarosci piksela
      szary = (wiersz[j].rgbBlue+wiersz[j].rgbGreen+wiersz[j].rgbRed)/3;
      // podstaw tą samą wartosc dla wszystkich skladowych
      wiersz[j].rgbBlue = szary;
      wiersz[j].rgbGreen = szary;
      wiersz[j].rgbRed = szary;
    }
  }

}//OdcienieSzarosci


//
// Filtr3x3 przektsztalca bitmape bmp wg filtru filtr[3][3] i zapisuje
// wynik w outbmp
//
int Filtr3x3( Graphics::TBitmap *bmp, Graphics::TBitmap *outbmp, double filtr[3][3] )
{
  int wysokosc, szerokosc;
  int i,j;
  RGBQUAD *piksel[3];

  wysokosc = bmp->Height;
  szerokosc = bmp->Width;
  //outbmp->Width = szerokosc;
  //outbmp->Height = szerokosc;

  double suma = 0;

  // oblicz sume elementow tablicy filtru
  for( i=0; i<3; i++)
        for( j=0; j<3; j++)
                suma += filtr[j];


  for( i=0; i<wysokosc; i++ )
  {
    // *wiersz to wskaznik do WYJSCIOWEJ bitmapy
    RGBQUAD *wiersz = (RGBQUAD *) outbmp->ScanLine;

    // pobierz piksel i jego sąsiadów
    // zwracając uwagę na przekroczenie granic obrazka
    // *piksel wksazuje na elementy WEJSCIOWEJ bitmapy

    piksel[1] = (RGBQUAD *) bmp->ScanLine;
    if(i>0)
      piksel[0] = (RGBQUAD *) bmp->ScanLine[i-1];
    else
      piksel[0] = piksel[1];

    if(i<wysokosc-1)
        piksel[2] = (RGBQUAD *) bmp->ScanLine[i+1];
    else
        piksel[2] = piksel[1];


    for( j=0; j<szerokosc; j++ )
    {
      double b = 0;
      double g = 0;
      double r = 0;

      //oblicz wynikową wartosc skladowych r,g,b po zastosowaniu filtru
      for( int k=0; k<3 ; k++ )
              for( int l=0; l<3 ; l++ )
              {
                if(j==0&&k==0)
                {
                        r += filtr[k][l]*piksel[l][0].rgbRed;
                        g += filtr[k][l]*piksel[l][0].rgbGreen;
                        b += filtr[k][l]*piksel[l][0].rgbBlue;
                }
                else if(j==szerokosc-1&&k==2)
                {
                        r += filtr[k][l]*piksel[l][j].rgbRed;
                        g += filtr[k][l]*piksel[l][j].rgbGreen;
                        b += filtr[k][l]*piksel[l][j].rgbBlue;
                }
                else
                {
                        r += filtr[k][l]*piksel[l][j-1+k].rgbRed;
                        g += filtr[k][l]*piksel[l][j-1+k].rgbGreen;
                        b += filtr[k][l]*piksel[l][j-1+k].rgbBlue;
                }
              }
      if( suma!=0 )
      {
        r /= suma;
        g /= suma;
        b /= suma;
      }

      //sprawdz zakresy
      r = (r>255)?255: (r<0)?0:r;
      b = (b>255)?255: (b<0)?0:b;
      g = (g>255)?255: (g<0)?0:g;

      //zapisz w WYJSCIOWEJ bitmapie
      wiersz[j].rgbBlue = (BYTE) b;
      wiersz[j].rgbGreen = (BYTE) g;
      wiersz[j].rgbRed = (BYTE) r;
    }
  }

} //DostosujBalans




zawartosc pliku fotoretusz.h  :
// Fotoretusz
// podstawowe filtry i efekty graficzne

#include <vcl\graphics.hpp>

int DostosujJasnosc( Graphics::TBitmap *bmp, int val );
int DostosujKontrast( Graphics::TBitmap *bmp, int val );
int PrzygotujMiniature( Graphics::TBitmap *oryginal, Graphics::TBitmap *miniatura,int szerokosc, int wysokosc);
int DostosujNasycenie (Graphics::TBitmap *bmp, int val );
int DostosujBalans( Graphics::TBitmap *bmp, int xr, int xg, int xb );
int Negatyw( Graphics::TBitmap *bmp);
int OdcienieSzarosci( Graphics::TBitmap *bmp);
int Filtr3x3( Graphics::TBitmap *bmp, Graphics::TBitmap *outbmp, double filtr[3][3] );

Moze jest ktos kto umie zrobic z tego DLL, aby mozna bylo wywolywac procedury z VB ??

22-06-2004 11:47
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Knight Lore''FC




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

No i ??? Nie ma znawcow C++ ?

03-07-2004 02:12
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Grizz




Typ: neutral
Postów: 50
Zarejestrowany: Jun 2004

W jakimś piśmie pisali jak to w delphi zrobić...

03-07-2004 09:05
Pokaż profil Grizz  Wyślij email do Grizz   
Knight Lore''FC




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

Nadal czekam na chetnych do zrobienia DLL-ki...
Moze macie znajomych piszacych w C++ ?

30-08-2004 23:30
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A nie może być w VB?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

31-08-2004 11:18
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Knight Lore''FC




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

Jak widzisz podalem kod procedur w C++ (jest o WIELE SZYBSZY niz VB) dla tego nie moze to byc VB...

31-08-2004 21:26
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

A jaka wydajność jest potrzebna?
Przez podanie wydajności rozumiem albo ilość bitmap o zadanym rozmiarze na jednostkę czasu lub czas przetwarzania pojedynczej bitmapy (też z podanym wymiarem).
Poza tym - czy ma obsługiwać tylko bitmapy 24-bitowe, czy też inne (16, 8, 4, 2, 1)?
I jakie dokładnie funkcje są potrzebne (nie używałem nigdy tej kontrolki)? Jasność i kontrast - to widzę. Ale co rozumieć przez "edytowanie ... kolorów RGB"?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

01-09-2004 00:12
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

Ja nie mam pliku "fotoretusz.h"

01-09-2004 08:15
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
kicaj




Typ: neutral
Postów: 271
Zarejestrowany: Aug 2003


Ja nie mam pliku "fotoretusz.h"


przeczytaj jeszcze raz kod w cpp ale od dolu to znajdziesz

01-09-2004 17:32
Pokaż profil kicaj  Wyślij email do kicaj        3914568
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

Acha, dzięki Kicaj, nie zauważyłęm tego...Ale ze mnie matoł

01-09-2004 20:50
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
Knight Lore''FC




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

ZNALAZLEM 2 rozne DLL i sa FREEEE !!! - ich mozliwosci klada na kolana (obydwie maja nawet kod zrodlowy DLL w C++)... szukam dalej - jak jeszcze cos znajde to dam info do Jelcyna aby wladowal je do WORKSHOPA - to sa istne perelki (ich szybkosc mnie powala...)
Oczywiscie sa przyklady uzycia ich w VB 6

[Post edytowany dnia 02-09-2004 19:34 przez Knight Lore'FC]

02-09-2004 19:33
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Chudy
[TLHW]Wiktor



Typ: moderator
Postów: 574
Zarejestrowany: Aug 2002


ZNALAZLEM 2 rozne DLL i sa FREEEE !!! - ich mozliwosci klada na kolana (obydwie maja nawet kod zrodlowy DLL w C++)... szukam dalej - jak jeszcze cos znajde to dam info do Jelcyna aby wladowal je do WORKSHOPA - to sa istne perelki (ich szybkosc mnie powala...)
Oczywiscie sa przyklady uzycia ich w VB 6

Super, można linka ?


_____________________________________________
Projekt "Thunder Cannons" nadchodzi...

03-09-2004 16:57
Pokaż profil Chudy  Wyślij email do Chudy   Odwiedź stronę Chudy       1220895
Knight Lore''FC




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

Jako ze Nikt nie mial odwagi podjac sie tematu postanowilem zajac sie tym samemu...
Bylo ciezko poniewaz nie znam C++ i rzucilem sie na obce wody. Jak widac troche to trwalo, ale JUZ JEST DLL-ka z obsluga w VB. Postanowilem na przykladach napisac wlasna DLL-ke (DUZO trzeba bylo zmieniac i poprawiac... jedne funkcje byly w jednym przykladzie a inne w innym i to calkiem inaczej zrobione... tzreba bylo to jakos zebrac i ujednolicic...)

Co umozliwia ? :

Jasnosc
Kontrast
Nasycenie
Wyostrzenie
Korekta Gamma
Korekta RGB *
Obrot o dowolny kat *

* - wymaga dopracowania

Dll-ka jest malutka - jedynie 70 kb, ale jest o wiele szybsza niz te same operacje w VB.

Na razie jej status to TESTING (trzeba dopracowac), ale wynik finalny bedzie FREEWARE
Czy sa osoby chetne do sprawdzenia dzialania ? - przyklad oczywiscie w VB6 ( nie wiem czy dziala w VB5, ale chyba tez sie da...)

[Post edytowany dnia 27-09-2004 20:16 przez Knight Lore'FC]

27-09-2004 20:14
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Knight Lore''FC




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

Korekta RGB juz zostala poprawiona
Dodano Odbicia lustrzane

27-09-2004 21:36
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Wszystkich odpowiedzi: 20 :: Maxymalnie na stronę: 20
Strona: [  << <   1 2   > >>  ]  z  2