А какой способ работы с растовыми изображениями наиболее быстр
что лутше сначала сформировать изображение в памяти, а потом прорисовать или наоборот?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As Integer
Dim mBitMap = New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppArgb)
PictureBox1.Image = mBitMap
For x = 0 To mBitMap.Width - 1
SetPixel(mBitMap, x, mBitMap.Height \ 2, System.Drawing.Color.RoyalBlue)
Next
End Sub
Public Sub SetPixel(ByVal BM As Bitmap, ByVal X As Integer, ByVal Y As Integer, ByVal RGB As System.Drawing.Color)
Dim BytePerPixel As Byte
Dim Offset As Integer
Dim Rect As Rectangle
Dim BMD As System.Drawing.Imaging.BitmapData
Dim MEM As IntPtr
Dim Marsh As System.Runtime.InteropServices.Marshal
Select Case BM.PixelFormat
Case Imaging.PixelFormat.Format24bppRgb
BytePerPixel = 3
Case Imaging.PixelFormat.Format32bppRgb, Imaging.PixelFormat.Format32bppArgb
BytePerPixel = 4
End Select
Rect = New System.Drawing.Rectangle(0, 0, BM.Width, BM.Height)
'заблокируем битмэп (это нужно для получения доступа к памяти)
BMD = BM.LockBits(Rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, BM.PixelFormat)
'получим указатель на первый пиксел в памяти
MEM = BMD.Scan0
' BMD.Stride указывает сколько байт занимает в памяти одна строка битмэпа
'вычислим смещение от начала первого байта
Offset = (BMD.Stride * Y) + (X * BytePerPixel)
'запишем наш пиксел
Marsh.WriteByte(MEM, Offset, RGB.B)
Marsh.WriteByte(MEM, Offset + 1, RGB.G)
Marsh.WriteByte(MEM, Offset + 2, RGB.R)
If BytePerPixel = 4 Then Marsh.WriteByte(MEM, Offset + 3, RGB.A)
'разблокируем битмэп
BM.UnlockBits(BMD)
End Sub
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g As Graphics
g = e.Graphics()
Dim img As Image = Image.FromFile("c:\test.bmp")
Dim w = img.Width
Dim h = img.Height
e.Graphics.DrawImage(img, 0, 0, w, h)
img.Dispose()
g.Dispose()
End Sub
PictureBox1.Image = Image.FromFile("D:\Untitled-1_1.tif")
PictureBox1.Image = Image.FromFile("D:\Untitled-1_1.tif")
А если ты все таки захочешь использовать "честный" попиксельный вывод то тебе придется использовать "честный" разбор форматов графических файлов, что наверное не входит в твои планы.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8