Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
è molto che non scrivo sul forum, di solito trovo in rete le soluzioni ai miei problemi...
Questa volta è diverso, il mio problema così insolito che sono convinto di aver scritto qualche cafonata tremenda che non riesco a trovare (ovviamente da una parte spero non lo sia per evitare figuracce).
Vi spiego il problema:
Il mio programma fa, o almeno dovrebbe fare, alcune semplici operazioni. Una volta caricata un'immagine da file (bmp, jpg o png) il programma ne crea altre 9.
La prima è uguale all'originale ma ridimensionata.
Le 8 successive sono copie dell'originale e della ridimensionata, ma ricolorate (bianco e nero o gialla ecc...).
Queste semplici operazioni però non sono, evidentemente, così semplici.
Quello che ottengo è che ogni volta che creo una delle 8 immagini l'original e la ridimensionata vengono ricolorate a loro volta, ottenendo quindi 8 volte lo stesso risultato.
Con un esempio forse il problema si comprende meglio:
Primo form dove selezionare l'immagine da caricare
Secondo form dove vengono visualizzate le 4 opzioni colorate diversamente
Classe "ImgHolder" che si occupa della creazione di tutte le immagini necessarie.
Ometterò nel codice ciò che non riguarda questo problema, se può servire il sorgente completo lo metterò senza problemi.
Il problema era nell'inizializzazione delle Bitmap e nei metodi che modificavano l'originale
(nonostante il passaggio dei valori non fosse per riferimento.. bah)
Se può servire a sbeffeggiarmi allego il sorgente corretto:
Codice sorgente - presumibilmente C++
[CODE]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace Fast_Recolorer
{
publicclass ImgHolder
{
public Bitmap Source;
public Bitmap Resized;
public Bitmap BW_R, PP_R, YW_R, CY_R;
public Bitmap BW, PP, YW, CY;
public ImgHolder(string path)
{
Source =new Bitmap(Bitmap.FromFile(path));
Set_Resized();
BW_R =new Bitmap(Black_White(Resized));
PP_R =new Bitmap(To_Purple(Resized));
YW_R =new Bitmap(To_Yellow(Resized));
CY_R =new Bitmap(To_Cyan(Resized));
BW =new Bitmap(Black_White(Source));
PP =new Bitmap(To_Purple(Source));
YW =new Bitmap(To_Yellow(Source));
CY =new Bitmap(To_Cyan(Source));
}
privatevoid Set_Resized()
{
double ratio =(double)Source.Width/256;
int y = Convert.ToInt32((double)Source.Height/ ratio);
Resized =new Bitmap(Source, new Size(256, y));
}
public Bitmap Black_White(Bitmap A)
{
Bitmap B =new Bitmap(A);
for(int y =0; y < A.Height-1; y++)
for(int x =0; x < A.Width-1; x++)
{
short r = A.GetPixel(x, y).R;
short g = A.GetPixel(x, y).G;
short b = A.GetPixel(x, y).B;
r = Convert.ToInt16((r + g + b)/ 3);
B.SetPixel(x, y, Color.FromArgb(r, r, r));
}
return B;
}
public Bitmap To_Purple(Bitmap A)
{
Bitmap B =new Bitmap(A);
for(int y =0; y < A.Height-1; y++)
for(int x =0; x < A.Width-1; x++)
{
short r = A.GetPixel(x, y).R;
short g = A.GetPixel(x, y).G;
short b = A.GetPixel(x, y).B;
r = Convert.ToInt16((r + g + b)/ 3);
B.SetPixel(x, y, Color.FromArgb(r, 0, r));
}
return B;
}
public Bitmap To_Yellow(Bitmap A)
{
Bitmap B =new Bitmap(A);
for(int y =0; y < A.Height-1; y++)
for(int x =0; x < A.Width-1; x++)
{
short r = A.GetPixel(x, y).R;
short g = A.GetPixel(x, y).G;
short b = A.GetPixel(x, y).B;
r = Convert.ToInt16((r + g + b)/ 3);
B.SetPixel(x, y, Color.FromArgb(r, r, 0));
}
return B;
}
public Bitmap To_Cyan(Bitmap A)
{
Bitmap B =new Bitmap(A);
for(int y =0; y < A.Height-1; y++)
for(int x =0; x < A.Width-1; x++)
{
short r = A.GetPixel(x, y).R;
short g = A.GetPixel(x, y).G;
short b = A.GetPixel(x, y).B;
r = Convert.ToInt16((r + g + b)/ 3);
B.SetPixel(x, y, Color.FromArgb(0, r, r));
}
return B;
}
}
}
[/CODE]
Ultima modifica effettuata da Fharamir il 23/05/2013 alle 14:50