Страница: 1 |
|
Вопрос: Загрузка картинки в PictureBox
|
Добавлено: 19.11.08 16:22
|
|
Автор вопроса: Владимир
|
Загружаю любую картинку в PictureBox, таким образом, чтобы она поместилась полностью в PictureBox имеющего размер 500 на 500.
Для этого использую e.Graphics.ScaleTransform(iwh, iwh),
почемуто :
картинка 800х600 меньше чем 500х500,
картинка 1280х1024 больше чем 500х500.
ПОЧЕМУ, не могу понять, я же вычисляю коофициент трансформации ?
Текст программы.
Public Class Form1
Dim ris As New Bitmap(15, 15, Imaging.PixelFormat.Format24bppRgb)
Private Sub ЗагрузитьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ЗагрузитьToolStripMenuItem.Click
Dim k As Integer
Dim filenameRead As String
OpenFileDialog1.ShowDialog()
filenameRead = OpenFileDialog1.FileName
If filenameRead = "" Then Exit Sub
ris = Image.FromFile(filenameRead)
wi = ris.Width
hi = ris.Height
If wi >= hi Then wh = wi Else wh = hi
iw = 0
ih = 0
1:
iwh = 500 / wh
whi = wh
wrs = iw
hrs = ih
PictureBox1.Refresh()
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
If iwh = 0 Then Exit Sub
Dim rec As New RectangleF(wrs, hrs, whi, whi) 'x,y коор. вер. лев. в ris прямоуг. разм. х' , y'
'трансформация , растяжка (>1) или сжатие (<1) одинаково по обеим осям iwh
e.Graphics.ScaleTransform(iwh, iwh)
'перенос изображения вырезанного в PictureBox1
e.Graphics.DrawImage(ris, 0, 0, rec, GraphicsUnit.Pixel) 'x,y коор. вер. лев в PictuteBox1
End Sub
Ответить
|
Номер ответа: 2 Автор ответа: Владимир
Вопросов: 1 Ответов: 2
|
Профиль | | #2
|
Добавлено: 20.11.08 15:56
|
Не помагает.
Определяю прямоугольную область
Dim rec As New RectangleF(wrs, hrs, whi, whi)
Задаю коэффициент сжатия
e.Graphics.ScaleTransform(iwh, iwh)
Бросяю в PictureBox
e.Graphics.DrawImage(ris, 0, 0, rec, GraphicsUnit.Pixel)
Вырезаная область картинки, должна занимать
всю область PictureBox
Если вырезаю всю исходную картинку,
то на PictureBox она должна разместится полностью,
но без искажения по вертикали или горизонтали,
т.к. коэффициент одинаков по вертикали и горизонтали.
Если загружаю изначально квадратную картинку, то все работает. Если загружаемая картинка прямоугольная,
то происходит не понятность (см.тему).
По моему ваше предложение и не могло помочь,
т.к. выше сказанные 3 действия отменяют настройку
PictureBox1.SizeMode.
Ответить
|
Номер ответа: 4 Автор ответа: Владимир
Вопросов: 1 Ответов: 2
|
Профиль | | #4
|
Добавлено: 21.11.08 08:33
|
Прошу прощение, но как я писал выше,
из загруженной картинки, я вырезаю квадрат,
иэтот квадрат растягиваю или сжимаяю до размера 500х500
с выводом на PictureBox.
Вчастном случае вырезаем всю картинку для проверки программы.
В программе вычисляется коэффициент сжатия 500/hw,
где hw мин. из размеров картинки. Так вот, я брал разные картинки. Результат: если исходная картинка квадратная,
то все нормально, если прямоугольная то результат непредсказуем. Текое ошущение, что при сжатии берется
не те размеры которые я читаю (ris.Width,ris.Height),
а другие и весьма неожиданные.
Я написал программку, которая изначально имеет коэффициент =0.1, и кнопочки с увеличением и уменьшением
коэффициента на 0.1 с его индикацией. В этом случае
получаемый коэффициент при нужном результате отличается
от вычиляемого.
Вот в чем проблема.
С уважением, Владимир.
Ответить
|
Страница: 1 |
Поиск по форуму