Bonjour,
Mon client(mobile phone) demande au serveur des pixels. Le serveur renvoie sous forme HTTP des pixels. Sur le serveur je faisais avec les bonnes initialisations des variables
A partir de cette image je l'affiche sur le serveur est la qualite est bonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Image image; source = new MemoryImageSource(width,height,pixels,0,width); image= Toolkit.getDefaultToolkit().createImage(source);
En revanche sur le client la qualite est degueulasse. Je m'attendais a un petit deficit de qualite mais a ce point la !
Pour recuperer lles pixels je fais : il y a beaucoup de code donc si vous comprenez pas c'est pas grave. Car normalement cette facon de marche a fait ses preuves pour d'autres images.
J'ai recuperer les pixels de facon differente que je fais d'habitude.
D'habitude je faisais int c=bimage.getRGB(x,y); pour recuperer les pixels.
La methode que j'ai utilise ici est une methode adapte pour recuperer des pixels d'une image 3d. Malheureusement l'image 3d sur le mobile est degueulasse. Vous me suivez ? Bon sauter ce bout de code si vous comprenez pas
Une fois les pixels recuperer je fais simplement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 byte[] buf = new byte[65535]; // Must be an even multiple of 3 !! //int maxB; //maxB=width*height*samplesPerPixel; System.out.println("ServerConnection::Do_imageThreeDRequest() :test"); //byte[] buf = new byte[width*height*samplesPerPixel]; int bytesRead=0; int currentSample=0; // 0=Red, 1=Green, 2=Blue argb[0] = 0; do { try { int n; while(bis.available() == 0) { Thread.yield(); } //LogClient.LogMessage("bis.available()="+bis.available()); if ((n = bis.read(buf,0,Math.min(65535,bis.available()))) != -1) // Regular blocking read doesn't work on Nokia !! // if ((n = bis.read(buf,0,Math.min(maxB,bis.available()))) != -1) { bytesRead += n; //LogClient.LogMessage("read "+n+" bytes (+"+bytesRead+" in total)"); for (int i=0 ; i < n ; i++) { //System.out.println("pixels = buf["+i+"]= "+buf[i]); if (samplesPerPixel == 3) { // Colour image...separate Red, Green and Blue components // All Java variables are "bigendian" so it is OK to construct ARGB value like this argb[currentPixelNo] = (argb[currentPixelNo] << 8) | (buf[i] + 128); if (++currentSample == 3) // Red -> Green -> Blue... { currentSample=0; // ...and Back to Red if (++currentPixelNo < argb.length) { // Zero the next pixel argb[currentPixelNo] = 0; } } else if (samplesPerPixel == 1) { // Monochrome image...Red==Green==Blue argb[currentPixelNo++] = ((buf[i] + 128) << 16) | ((buf[i] + 128) << 8) | (buf[i] + 128); } //beaucoup d'exceptions }while(bytesRead < contentLength);
pour recuperer une image qui est malheureusement de mauvaise qualite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Image immutableImg = Image.createRGBImage(argb,req.getWidth(),req.getHeight(),false); argb=null;
Celui qui a lu jusque la merci !!
C'est un domaine assez specifique je ne m'attends pas a beaucoup de reponses donc merci ceux qui ont l'audace de repondre "!!
Partager