elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Problema Matematico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema Matematico  (Leído 3,172 veces)
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Problema Matematico
« en: 22 Octubre 2010, 06:31 am »

Hi, tengo un problema, que me voló la cabeza seguro que es una boludes mas grande que una casa pero se me quemaron las neuronas, es medio complicado explicarlo pero voy a intentarlo.

supongamos una imagen, esta tiene unas dimensiones de 16 x 16px  por cada pixel de esa imagen tenemos 3 bytes  esto da como resultado un array de 768 bytes

16 x 16 x 3 = 768

otro ejemplo

32 * 16 * 3 = 1536

bien haciendo esa ecuación puedo saber la cantidad de bytes que ocupara la imagen, ahora supongamos que yo quiero ingresar la cantidad de bytes y deseo que la imagen sea lo mas cuadrada posible que ecuación tengo que hacer???

yo puedo poner (tomando el primer ejemplo)

Ancho =  Sqr(768 / 3)
Alto = Ancho

pero que pasa si el array que ingreso es de 769 bytes tengo un resultado erróneo de  16,0104.. y esto no es una medida valida para una imagen ya que no puede tener decimales.

entonces puede que tenga que adicionar uno/s bytes extra al array para que sea un valor "par" así poder obtener un resultado correcto, no importa que sea una imagen 100% cuadrada, pero que sea lo mas aproximado.

Se entiende??, Gracias


En línea

EddyW

Desconectado Desconectado

Mensajes: 187



Ver Perfil WWW
Re: Problema Matematico
« Respuesta #1 en: 22 Octubre 2010, 06:53 am »

Wenas LeandroA,

Bueno, no se si entendí, eso se verá en mi respuesta :P
Código
  1. Dim TmBytes As Long, WH As Long, Porct As Integer
  2.  
  3. ' -> (17*17) * 3 -> 867 Bytes
  4. TmBytes = 900
  5. ' -> WH=Width And Height
  6. WH = Sqr(Round(TmBytes / 3, 0))
  7. ' -> Porcentaje
  8. Porct = ((WH * WH * 3) * 100) / TmBytes
  9. ' -> Show..
  10. MsgBox Porct & "% al original"

No se si ha eso te referías,
Para redondear, usa Round, luego saca un porcentaje.

SaluDOS!!!


En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: Problema Matematico
« Respuesta #2 en: 22 Octubre 2010, 07:53 am »

hola, no noes eso, pero de todas formas estoy confundido en algo creo que estoy malinterpretando algo
lo que descrivi anteriormente no es tan asi, creo que es mejor cerrar la pregunta hasta tener en claro las cosas.

una imagen de 24 * 24 tiene 1728  (24 x 24 x 3 = 1728)

pero una imagen de 25 * 25 tiene 1900 (25 x 25 x 3 = 1875)

esto no cumple la regla que pensaba

alto x ancho x 3

las imagenes tienen una profundidad de bits de 24 osea un savepicture de vb

Código:
Option Explicit

Private Type BITMAPFILEHEADER '14 bytes
    bfType As Integer '"magic cookie" - must be "BM"
    bfSize As Long
    bfReserved1 As Integer
    bfReserved2 As Integer
    bfOffBits As Long
End Type

Private Type BITMAPINFOHEADER '40 bytes
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type

Dim BFH As BITMAPFILEHEADER
Dim BIH As BITMAPINFOHEADER

Private Sub Form_Load()
    Me.ScaleMode = vbPixels
    Picture1.BorderStyle = 0
    Picture1.BackColor = vbWhite
   
    Picture1.Width = 24
    Picture1.Height = 24
    DoEvents
    SavePicture Picture1.Image, App.Path & "\Image1.bmp"
    LoadHeaderPicture App.Path & "\Image1.bmp"
   
    Debug.Print BIH.biSizeImage
   
    Picture1.Width = 25
    Picture1.Height = 25
    DoEvents
    SavePicture Picture1.Image, App.Path & "\Image1.bmp"
    LoadHeaderPicture App.Path & "\Image1.bmp"
   
    Debug.Print BIH.biSizeImage

   
End Sub


Private Sub LoadHeaderPicture(ByVal sPath As String)
    Open sPath For Binary Access Read As #1
        Get #1, , BFH
        Get #1, Len(BFH) + 1, BIH
    Close #1
End Sub

a estudiar el formato bmp Fundamental  :huh:
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Problema Matematico
« Respuesta #3 en: 22 Octubre 2010, 09:39 am »

.
Haber si entendi quieres que sea lo mas cuadro posible aun que sea Ancho = X y Alto = X+1 o en el mejor de los casos Ancho = X y Alto = X PERO SIEMPRE SIN PUNTOS DESIMALES?... es esto?... si es asi, solo es una ecuación de equivalencia... y he aqui dicho problema...

Dulces Lunas!¡.
« Última modificación: 22 Octubre 2010, 09:52 am por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Problema Matematico
« Respuesta #4 en: 22 Octubre 2010, 09:56 am »

A ver, yo visual basic se poco, pero podrías a:

Ancho =  Sqr(768/3)
Alto = Ancho

Transformar el resultado de Sqr(768/3) a Int o Integer, no se cómo se dirá (como se haga en VB), de manera que así pierdes los decimales y redondea. Después, haces:

int Tamaño = (768/3)//y le haceis una conversión explícita a int
Ancho =  Sqr(Tamaño)//Se le vuelve a hacer una conversión
Alto = Tamaño - Ancho
« Última modificación: 22 Octubre 2010, 10:09 am por KuraraGNU » En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Problema Matematico
« Respuesta #5 en: 22 Octubre 2010, 14:00 pm »

HINT: El número que ingreses tiene que ser múltiplo de 3...
En línea

KuraraGNU

Desconectado Desconectado

Mensajes: 209



Ver Perfil
Re: Problema Matematico
« Respuesta #6 en: 22 Octubre 2010, 14:10 pm »

HINT: El número que ingreses tiene que ser múltiplo de 3...
Pero eso no quiere decir que ese número tenga una raíz cuadrada exacta.
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Problema Matematico
« Respuesta #7 en: 22 Octubre 2010, 14:20 pm »

Ahm, no pero es un paso hacia adelante! :P

Puedes probar con aspect ratios, es decir algo como 3:4. 1:1, 4:5 lo más cuadrado que puedas intentando varias posibilidades.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Problema Matematico
« Respuesta #8 en: 23 Octubre 2010, 16:26 pm »

hola, no noes eso, pero de todas formas estoy confundido en algo creo que estoy malinterpretando algo
lo que descrivi anteriormente no es tan asi, creo que es mejor cerrar la pregunta hasta tener en claro las cosas.

una imagen de 24 * 24 tiene 1728  (24 x 24 x 3 = 1728)

pero una imagen de 25 * 25 tiene 1900 (25 x 25 x 3 = 1875)

esto no cumple la regla que pensaba

alto x ancho x 3

las imagenes tienen una profundidad de bits de 24 osea un savepicture de vb

Esto es porque el formato BMP tiene algunas otras cosas ademas de la picture, como las cabeceras y espacios al pedo.
Lo recuerdo de aca: Riemers DirectX Tutorial
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines