PDA

View Full Version : BCB e StretchBlt


misterx
13-11-2003, 08:21
sto usando l'API StretchBlt() per ridimensionare una serie di immagini di grandi dimensioni: 3000x4000 pixel ad esempio

la fregatura è che se eseguo il programma finale sotto windows 2000 tutto fila liscio

se eseguo il medesimo programma sotto windows 98 SE mi vengono create delle immagini ridimensionate bianche=vuote

sono andato a fondo alla questione ma non ho capito in quale cavolo di DLL ed in quale altri risorse sia posizionata la StretchBlt

mi sono detto: magari aggiornando qualche DLL va tutto a posto, ma va a beccare la responsabile

il mistero si infittisce
il problema dell'immagine ridimensionata si manifesta sia su immagini jpeg che bitmap

se da 3000x4000 passo a 120x.... ottengo un'immagine bianca
se da 3000x4000 passo a 200x.... è tutto ok

da 200x... posso ora passare a 120x... ed è tutto ok

ma xhè cavolo se passo direttamente da 3000x.... a 120x.... ottengo un'immagine vuota=bianca ?


se ne sapete qualcosa


p.s.
ho letto in giro che il fenomeno si manifesta anche con VB; sembrerebbe legato all'SO :muro:

misterx
13-11-2003, 10:47
verloc


mi abbandoni nel momento del bisogno ??? :D

misterx
14-11-2003, 09:41
:O verloc :confused:

a2000
14-11-2003, 09:56
Originariamente inviato da misterx
...

p.s.
ho letto in giro che il fenomeno si manifesta anche con VB; sembrerebbe legato all'SO :muro:

anche con Word. :)

a2000
14-11-2003, 09:59
bianche nel visualizza Layout di stampa ma non nel preview.

è vizio.

a2000
14-11-2003, 10:03
troppe DLL fanno male al cuore
e alla testa programmatore.

:D

a2000
14-11-2003, 10:15
è vero che le case si fanno con i mattoni.
ma qual'è la dimensione ottima dei mattoni ?

a me pare che stiate andando verso quella dei mattoncini lego quando quelli che comandano si stanno orientando su stanze modulari attrezzate.

va bene dividere, modularizzare, ma come in qualsiasi organismo o struttura oltre un certo grado di frammentazione le "resistenze di trasporto all'interfaccia" infartuano il sistema.

misterx
14-11-2003, 11:04
Originariamente inviato da a2000
è vero che le case si fanno con i mattoni.
ma qual'è la dimensione ottima dei mattoni ?

a me pare che stiate andando verso quella dei mattoncini lego quando quelli che comandano si stanno orientando su stanze modulari attrezzate.

va bene dividere, modularizzare, ma come in qualsiasi organismo o struttura oltre un certo grado di frammentazione le "resistenze di trasporto all'interfaccia" infartuano il sistema.



discorso che non c'entra nulla!

Se ho 100.000 immagini semplici semplici per le quali riesco ad ottenere informazioni utili (capire perfettemente cosa mi rappresenta l'anteprima) anche alla risoluzione di 120x90 pixel, risoluzione che tra le altre cose mi fa occupare poco spazio su disco, perchè rinunciarvi ?

per colpa di un bacarozzo del vecchio bill ?


non mi sono seduto sugli allori e quindi:


for (int y = 0; y < Image1->Picture->Bitmap->Height; y+=stepy){

OriginalRow = (RGBTRIPLE*)Image1->Picture->Bitmap->ScanLine[y];
NewRow = (RGBTRIPLE*)Image2->Picture->Bitmap->ScanLine[ny++];

for(int x = 0; x < Image1->Picture->Bitmap->Width; x+=stepx)
NewRow[nx++] = OriginalRow[x];

nx=0;
}



by-passiamo tutto con questo codice


a2000
se te la senti di sviluppare un algoritmo furbo tale come quello di PhotoShop :D

a2000
14-11-2003, 11:12
bravo !

così mi piaci: aggressivo con intimo leopardato !

(originale, non a causa di squarrao :rotfl: ).

a2000
14-11-2003, 11:23
Originariamente inviato da misterx
...

a2000
se te la senti di sviluppare un algoritmo furbo tale come quello di PhotoShop :D

e capirai ... :cool:

a2000
14-11-2003, 11:32
scommettiamo ? :Perfido: :sborone:

misterx
14-11-2003, 11:52
notate le differenze

misterx
14-11-2003, 12:07
Originariamente inviato da a2000
scommettiamo ? :Perfido: :sborone:


lanciati, sono sicuro che qualcosa di buono ne uscirà.....

del resto hai a disposizione una matrixe di pixel

devi solo mettere daccordo i pixel evitando che nel ridimensionamento appaiano fastidiosi buchi=pixel scuri ed isolati dove non dovrebbero esserci :D


boh, forse usando opportunamente le matrici :confused:

verloc
14-11-2003, 15:27
Oh,sò quà (non me n'ero accorto che mi avevi chiamato)

Ce la tieni con le immagini eh! :)

lassa perde le api di win e le matrici(questo è il tipico caso in cui non servono a un cacchio o fan' shkif')

visto che fai un uso smodato delle immagini (spero non per gli scopi di un certo utente con cui... ho recentemente avuto un ...diciamolo piccolo diverbio :p )


Questa è secondo me la soluzione migliore (direi decisamente esaustiva per tutti i tuoi bisogni corporali :oink: )


http://www.g32.org/graphics32/index.html

(non credo soffrirà del difetto di cui sopra)


...in fondo c'è sempre il suicidio come alternativa :D


La morale di verloc:
per queste str... c'è sempre uno che ha fatto una libreria funzionante 100000 volte meglio di quanto tu (impersonale) potrai mai fare...

misterx
14-11-2003, 21:38
verloc, sbaglio a leggere o è per delphi ? :confused:

però ad usare sempre l'acqua calda non si impara molto :(

verloc
15-11-2003, 06:43
Ci avrei giurato! :D
Hai fatto vincere un caffè a me stesso!
Ho scommesso che come sempre avresti fatto il contrario!!! :)

I) Se tu avessi scaricato almeno gli esempi compilati avresti capito in 3 secondi che quella era la tua PANACEA,vista la facilità d'uso e le prestazioni.

II)Se tu avessi letto almeno l'introduzione avresti verificato che ci sono i bpj per il CBuilder.


Hai deciso di farmi incazzare pure tu? :mad: :D

Per caso godi nel perdere tempo in aree del sapere dove non dovresti? (indovina chi la pensa così: :) )

...Charlie Calvert (CBuilder Unleashed),a2000...

2 categorie di programmatori:

A)Fanno le applicazioni

B)Fanno le librerie o i componenti.

A quale vuoi appartenere?(le categorie di cui sopra non sono necessariamente in ordine di importanza)


Hai 2 giorni di tempo per scaricare la libreria e fare uno screenshot (da vedere qui)di quello che dovevi fare...

sai cos'è il SEMTEX? :mad:

misterx
15-11-2003, 11:16
non so minimamente cosa sia il SEMTEX e non cerco nemmeno in rete così me lo spieghi tu :p

in ogni caso, avrei preferito che mi postassi l'algoritmo dell'interpolazione che poi, è quello solo quello che mi interessa

boh, magari a2000 ci stà già lavorando :D

mi raccomando a2000, non vale copiare; solo algoritmi genuini :D

ad ogni modo, in PhotoShop è molto più efficace; più si invecchia e più si diventa esigenti

una fatto molto importante è il seguente:
se continuo ad usare materiale altrui, pur apprezzandolo, ogni volta che ho bisogno di una nuova caratteristica dovrei pendere dalle labbra altrui; ti sembra logico ?


trai le tue conclusioni :)

a2000
15-11-2003, 11:32
Originariamente inviato da verloc
....

2 categorie di programmatori:

A) Fanno le applicazioni

B) Fanno le librerie o i componenti.

A quale vuoi appartenere?(le categorie di cui sopra non sono necessariamente in ordine di importanza)

....




eh sì solo che la carrozzeria (applicazioni) si vede mentre il motore (librerie) no e allora non vorrei che si cominciasse a pensare che la carrozzeria conta più del motore ...

... e allora sono d'accordo con quel professore a cui avevano chiesto i suoi codici di calcolo in formato DLL come "schiavi" (server) di non so quale interfaccia di visualizzazione.
e quello gli ha risposto che si potevano andare a fare incul@re e che le sue interfacce di pre e post processing si chiamavano Word, Excel, [Access] e AutoCAD ed erano queste appendici del codice e non il contrario.

:)

a2000
15-11-2003, 11:35
siccome poi chi fa i motori è generalmente ingenuo, romantico, sfigato, nerd e certe volte pure russo non vorrei che a un certo punto invece di fargli fare i codici decidessero di mettergli direttamente due fili di rame nella crapa e uno su per il culo come nei baccelli di matrix !

verloc
15-11-2003, 14:59
La tua API probabilmente fa solo quello che dice di fare:ridurre.
il che dovrebbe consistere in una serie + o meno sofisticata di divisioni intere.

Quanto fanno 16x16 pixels rossi ridotti del 50 %?
8x8 pixels rossi.

Bene, quando invece sono 350 pixel diversi?

Risultato=caxxta.

Perchè in quel caso (forte riduzione percentuale) il risultato migliora soltanto con un effetto ottico (ingannatore):

Non fa lo smut shading!!!


In genere a meno di avere pixels di 30000 tipi diversi è sempre possibile ridurre (anche a skifezza)perciò la API deve avere un baco secondo me.

Il test che dovevi fare:

ridurre una bmp 4000x4000 di pixels monocolore(Blu o rosso)
e vedere se te la riduceva alle dimensioni che ti creavano problemi.

Se ti dico che la g32 fa pure lo smut shading ti decidi ad usarla :) ?

verloc
15-11-2003, 15:04
Ps.

Il Semtex è il C4 dei ricchi! :D

verloc
15-11-2003, 15:18
fra l'altro ti potresti studiare i codici della g32e imparare tutte quelle cose che servono per processare le immagini.

...se proprio vuoi studiare :oink:


...e se vuoi fare il nerd :

http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/Algorithms.htm

misterx
15-11-2003, 17:10
Originariamente inviato da verloc
La tua API probabilmente fa solo quello che dice di fare:ridurre.
il che dovrebbe consistere in una serie + o meno sofisticata di divisioni intere.

Non fa lo smut shading!!!



la API che ho postato all'inizio fa la medesima cosa del mio algoritmo e cioè:

per ridimensionare, costruisce semplicemente una nuova immagine saltando di n pixel usando una banale divisione :)

esempio, consideriamo un'immagine quadrata:

da 2000x2000 pixel, vuoi un'immagine da 200x200 pixel ?

ok, nella nuova immagine ti metto per ogni riga e colonna i pixel

0
10
20
30
40
50
...
...
2000

e gli altri buttiamoli via :)

morale, l'API di bill gates toglie e basta

a2000
15-11-2003, 21:17
ragazzi, c'è una cosa che si chiama "rinormalizzazione di gruppo" ...

misterx
15-11-2003, 21:31
Originariamente inviato da a2000
ragazzi, c'è una cosa che si chiama "rinormalizzazione di gruppo" ...



:confused:


sarà mica una battutaccia ne ??? :mad: :D

verloc
16-11-2003, 06:59
Originariamente inviato da misterx

morale, l'API di bill gates toglie e basta

Mia madre dice in questi casi:

"...quando il grasso gli è arrivato alla gola..."
ecco i risultati!(del monopolio) aggiungo io :mad: